/*
 *  Licensed to the Apache Software Foundation (ASF) under one or more
 *  contributor license agreements.  See the NOTICE file distributed with
 *  this work for additional information regarding copyright ownership.
 *  The ASF licenses this file to You under the Apache License, Version 2.0
 *  (the "License"); you may not use this file except in compliance with
 *  the License.  You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 *  Unless required by applicable law or agreed to in writing, software
 *  distributed under the License is distributed on an "AS IS" BASIS,
 *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 *  See the License for the specific language governing permissions and
 *  limitations under the License.
 */

/**
 * @author Pavel Dolgov
 *
 * This file is based on Win32 headers and has been generated by the nativebridge tool.
 */
package org.apache.harmony.awt.nativebridge.windows;

import org.apache.harmony.awt.nativebridge.*;
import org.apache.harmony.awt.Utils;

public class Win32 extends BasicLibWrapper {
    static Win32 instance;

    public static synchronized Win32 getInstance() {
        if (instance == null) {
            instance = new Win32();
        }
        return instance;
    }

    private Win32() {
        Utils.loadLibrary("Win32Wrapper"); //$NON-NLS-1$
        init();
    }

    private static native void init();

    public final int FillRect(long hDC, RECT lprc, long hbr) {
        long tmp_0 = lprc == null ? 0 : lprc.longLockPointer();
        int tmp_ret = FillRect(hDC, tmp_0, hbr);
        if (lprc != null) {
            lprc.unlock();
        }
        return tmp_ret;
    }
    public final native int FillRect(long hDC, long lprc, long hbr);


    public static class RECT extends CommonStructWrapper {

        public static final int sizeof = 16;

        RECT(boolean direct) {
            super(sizeof, direct);
        }
        RECT(VoidPointer base) {
            super(base);
        }
        RECT(long addr) {
            super(addr);
        }
        public final void set_left(int val) {
            byteBase.setInt32(0, val);
        }
        public final int get_left() {
            return byteBase.getInt32(0);
        }
        public final void set_top(int val) {
            byteBase.setInt32(4, val);
        }
        public final int get_top() {
            return byteBase.getInt32(4);
        }
        public final void set_right(int val) {
            byteBase.setInt32(8, val);
        }
        public final int get_right() {
            return byteBase.getInt32(8);
        }
        public final void set_bottom(int val) {
            byteBase.setInt32(12, val);
        }
        public final int get_bottom() {
            return byteBase.getInt32(12);
        }
        @Override
        public int size() {
            return sizeof;
        }
    }

    public final RECT createRECT(boolean direct) {
        return new RECT(direct);
    }
    public final RECT createRECT(VoidPointer base) {
        return new RECT(base);
    }
    public final RECT createRECT(long addr) {
        return new RECT(addr);
    }

    public final native int LineTo(long param_0, int param_1, int param_2);

    public final native int GetWindowLongW(long hWnd, int nIndex);

    public final int PeekMessageW(MSG lpMsg, long hWnd, int wMsgFilterMin, int wMsgFilterMax, int wRemoveMsg) {
        long tmp_0 = lpMsg == null ? 0 : lpMsg.longLockPointer();
        int tmp_ret = PeekMessageW(tmp_0, hWnd, wMsgFilterMin, wMsgFilterMax, wRemoveMsg);
        if (lpMsg != null) {
            lpMsg.unlock();
        }
        return tmp_ret;
    }
    public final native int PeekMessageW(long lpMsg, long hWnd, int wMsgFilterMin, int wMsgFilterMax, int wRemoveMsg);


    public static class MSG extends CommonStructWrapper {

        public static final int sizeof = NativeBridge.is64 ? 48 : 28;

        MSG(boolean direct) {
            super(sizeof, direct);
        }
        MSG(VoidPointer base) {
            super(base);
        }
        MSG(long addr) {
            super(addr);
        }
        public final void set_hwnd(long val) {
            byteBase.setAddress(0, val);
        }
        public final long get_hwnd() {
            return byteBase.getAddress(0);
        }
        public final void set_message(int val) {
            byteBase.setInt32(NativeBridge.is64 ? 8 : 4, val);
        }
        public final int get_message() {
            return byteBase.getInt32(NativeBridge.is64 ? 8 : 4);
        }
        public final void set_wParam(long val) {
            byteBase.setCLong(NativeBridge.is64 ? 16 : 8, val);
        }
        public final long get_wParam() {
            return byteBase.getCLong(NativeBridge.is64 ? 16 : 8);
        }
        public final void set_lParam(long val) {
            byteBase.setCLong(NativeBridge.is64 ? 24 : 12, val);
        }
        public final long get_lParam() {
            return byteBase.getCLong(NativeBridge.is64 ? 24 : 12);
        }
        public final void set_time(int val) {
            byteBase.setInt32(NativeBridge.is64 ? 32 : 16, val);
        }
        public final int get_time() {
            return byteBase.getInt32(NativeBridge.is64 ? 32 : 16);
        }
        public final POINT get_pt() {
            return instance.createPOINT(getElementPointer(NativeBridge.is64 ? 36 : 20));
        }
        @Override
        public int size() {
            return sizeof;
        }
    }

    public final MSG createMSG(boolean direct) {
        return new MSG(direct);
    }
    public final MSG createMSG(VoidPointer base) {
        return new MSG(base);
    }
    public final MSG createMSG(long addr) {
        return new MSG(addr);
    }


    public static class POINT extends CommonStructWrapper {

        public static final int sizeof = 8;

        POINT(boolean direct) {
            super(sizeof, direct);
        }
        POINT(VoidPointer base) {
            super(base);
        }
        POINT(long addr) {
            super(addr);
        }
        public final void set_x(int val) {
            byteBase.setInt32(0, val);
        }
        public final int get_x() {
            return byteBase.getInt32(0);
        }
        public final void set_y(int val) {
            byteBase.setInt32(4, val);
        }
        public final int get_y() {
            return byteBase.getInt32(4);
        }
        @Override
        public int size() {
            return sizeof;
        }
    }

    public final POINT createPOINT(boolean direct) {
        return new POINT(direct);
    }
    public final POINT createPOINT(VoidPointer base) {
        return new POINT(base);
    }
    public final POINT createPOINT(long addr) {
        return new POINT(addr);
    }

    public final native int BitBlt(long param_0, int param_1, int param_2, int param_3, int param_4, long param_5, int param_6, int param_7, int param_8);

    public final int GetSaveFileNameW(OPENFILENAMEW param_0) {
        long tmp_0 = param_0 == null ? 0 : param_0.longLockPointer();
        int tmp_ret = GetSaveFileNameW(tmp_0);
        if (param_0 != null) {
            param_0.unlock();
        }
        return tmp_ret;
    }
    public final native int GetSaveFileNameW(long param_0);


    public static class OPENFILENAMEW extends CommonStructWrapper {

        public static final int sizeof = NativeBridge.is64 ? 152 : 88;

        OPENFILENAMEW(boolean direct) {
            super(sizeof, direct);
        }
        OPENFILENAMEW(VoidPointer base) {
            super(base);
        }
        OPENFILENAMEW(long addr) {
            super(addr);
        }
        public final void set_lStructSize(int val) {
            byteBase.setInt32(0, val);
        }
        public final int get_lStructSize() {
            return byteBase.getInt32(0);
        }
        public final void set_hwndOwner(long val) {
            byteBase.setAddress(NativeBridge.is64 ? 8 : 4, val);
        }
        public final long get_hwndOwner() {
            return byteBase.getAddress(NativeBridge.is64 ? 8 : 4);
        }
        public final void set_hInstance(long val) {
            byteBase.setAddress(NativeBridge.is64 ? 16 : 8, val);
        }
        public final long get_hInstance() {
            return byteBase.getAddress(NativeBridge.is64 ? 16 : 8);
        }
        public final void set_lpstrFilter(Int16Pointer val) {
            byteBase.setPointer(NativeBridge.is64 ? 24 : 12, val);
        }
        public final Int16Pointer get_lpstrFilter() {
            return nb.createInt16Pointer(byteBase.getAddress(NativeBridge.is64 ? 24 : 12));
        }
        public final void set_lpstrCustomFilter(Int16Pointer val) {
            byteBase.setPointer(NativeBridge.is64 ? 32 : 16, val);
        }
        public final Int16Pointer get_lpstrCustomFilter() {
            return nb.createInt16Pointer(byteBase.getAddress(NativeBridge.is64 ? 32 : 16));
        }
        public final void set_nMaxCustFilter(int val) {
            byteBase.setInt32(NativeBridge.is64 ? 40 : 20, val);
        }
        public final int get_nMaxCustFilter() {
            return byteBase.getInt32(NativeBridge.is64 ? 40 : 20);
        }
        public final void set_nFilterIndex(int val) {
            byteBase.setInt32(NativeBridge.is64 ? 44 : 24, val);
        }
        public final int get_nFilterIndex() {
            return byteBase.getInt32(NativeBridge.is64 ? 44 : 24);
        }
        public final void set_lpstrFile(Int16Pointer val) {
            byteBase.setPointer(NativeBridge.is64 ? 48 : 28, val);
        }
        public final Int16Pointer get_lpstrFile() {
            return nb.createInt16Pointer(byteBase.getAddress(NativeBridge.is64 ? 48 : 28));
        }
        public final void set_nMaxFile(int val) {
            byteBase.setInt32(NativeBridge.is64 ? 56 : 32, val);
        }
        public final int get_nMaxFile() {
            return byteBase.getInt32(NativeBridge.is64 ? 56 : 32);
        }
        public final void set_lpstrFileTitle(Int16Pointer val) {
            byteBase.setPointer(NativeBridge.is64 ? 64 : 36, val);
        }
        public final Int16Pointer get_lpstrFileTitle() {
            return nb.createInt16Pointer(byteBase.getAddress(NativeBridge.is64 ? 64 : 36));
        }
        public final void set_nMaxFileTitle(int val) {
            byteBase.setInt32(NativeBridge.is64 ? 72 : 40, val);
        }
        public final int get_nMaxFileTitle() {
            return byteBase.getInt32(NativeBridge.is64 ? 72 : 40);
        }
        public final void set_lpstrInitialDir(Int16Pointer val) {
            byteBase.setPointer(NativeBridge.is64 ? 80 : 44, val);
        }
        public final Int16Pointer get_lpstrInitialDir() {
            return nb.createInt16Pointer(byteBase.getAddress(NativeBridge.is64 ? 80 : 44));
        }
        public final void set_lpstrTitle(Int16Pointer val) {
            byteBase.setPointer(NativeBridge.is64 ? 88 : 48, val);
        }
        public final Int16Pointer get_lpstrTitle() {
            return nb.createInt16Pointer(byteBase.getAddress(NativeBridge.is64 ? 88 : 48));
        }
        public final void set_Flags(int val) {
            byteBase.setInt32(NativeBridge.is64 ? 96 : 52, val);
        }
        public final int get_Flags() {
            return byteBase.getInt32(NativeBridge.is64 ? 96 : 52);
        }
        public final void set_nFileOffset(short val) {
            byteBase.setInt16(NativeBridge.is64 ? 100 : 56, val);
        }
        public final short get_nFileOffset() {
            return byteBase.getInt16(NativeBridge.is64 ? 100 : 56);
        }
        public final void set_nFileExtension(short val) {
            byteBase.setInt16(NativeBridge.is64 ? 102 : 58, val);
        }
        public final short get_nFileExtension() {
            return byteBase.getInt16(NativeBridge.is64 ? 102 : 58);
        }
        public final void set_lpstrDefExt(Int16Pointer val) {
            byteBase.setPointer(NativeBridge.is64 ? 104 : 60, val);
        }
        public final Int16Pointer get_lpstrDefExt() {
            return nb.createInt16Pointer(byteBase.getAddress(NativeBridge.is64 ? 104 : 60));
        }
        public final void set_lCustData(long val) {
            byteBase.setCLong(NativeBridge.is64 ? 112 : 64, val);
        }
        public final long get_lCustData() {
            return byteBase.getCLong(NativeBridge.is64 ? 112 : 64);
        }
        public final void set_lpfnHook(long val) {
            byteBase.setAddress(NativeBridge.is64 ? 120 : 68, val);
        }
        public final long get_lpfnHook() {
            return byteBase.getAddress(NativeBridge.is64 ? 120 : 68);
        }
        public final long LPOFNHOOKPROC(long param_0, int param_1, long param_2, long param_3) {
            long tmp_ret = instance.proxycall0(get_lpfnHook(), param_0, param_1, param_2, param_3);
            return tmp_ret;
        }
        public final void set_lpTemplateName(Int16Pointer val) {
            byteBase.setPointer(NativeBridge.is64 ? 128 : 72, val);
        }
        public final Int16Pointer get_lpTemplateName() {
            return nb.createInt16Pointer(byteBase.getAddress(NativeBridge.is64 ? 128 : 72));
        }
        public final void set_pvReserved(VoidPointer val) {
            byteBase.setPointer(NativeBridge.is64 ? 136 : 76, val);
        }
        public final VoidPointer get_pvReserved() {
            return nb.createInt8Pointer(byteBase.getAddress(NativeBridge.is64 ? 136 : 76));
        }
        public final void set_dwReserved(int val) {
            byteBase.setInt32(NativeBridge.is64 ? 144 : 80, val);
        }
        public final int get_dwReserved() {
            return byteBase.getInt32(NativeBridge.is64 ? 144 : 80);
        }
        public final void set_FlagsEx(int val) {
            byteBase.setInt32(NativeBridge.is64 ? 148 : 84, val);
        }
        public final int get_FlagsEx() {
            return byteBase.getInt32(NativeBridge.is64 ? 148 : 84);
        }
        @Override
        public int size() {
            return sizeof;
        }
    }

    public final OPENFILENAMEW createOPENFILENAMEW(boolean direct) {
        return new OPENFILENAMEW(direct);
    }
    public final OPENFILENAMEW createOPENFILENAMEW(VoidPointer base) {
        return new OPENFILENAMEW(base);
    }
    public final OPENFILENAMEW createOPENFILENAMEW(long addr) {
        return new OPENFILENAMEW(addr);
    }

    final native long proxycall0(long fnptr, long param_0, int param_1, long param_2, long param_3);
    public final native int CreateCaret(long hWnd, long hBitmap, int nWidth, int nHeight);

    public final native int ImmDestroyContext(long param_0);

    public final int ImmGetCompositionStringW(long param_0, int param_1, VoidPointer param_2, int param_3) {
        long tmp_0 = param_2 == null ? 0 : param_2.longLockPointer();
        int tmp_ret = ImmGetCompositionStringW(param_0, param_1, tmp_0, param_3);
        if (param_2 != null) {
            param_2.unlock();
        }
        return tmp_ret;
    }
    public final native int ImmGetCompositionStringW(long param_0, int param_1, long param_2, int param_3);

    public final native int GetSystemMetrics(int nIndex);

    public final native int SetForegroundWindow(long hWnd);

    public final native long SendMessageW(long hWnd, int Msg, long wParam, long lParam);

    public final int GetThemeSysFont(VoidPointer hTheme, int iFontId, LOGFONTA plf) {
        long tmp_0 = hTheme == null ? 0 : hTheme.longLockPointer();
        long tmp_1 = plf == null ? 0 : plf.longLockPointer();
        int tmp_ret = GetThemeSysFont(tmp_0, iFontId, tmp_1);
        if (hTheme != null) {
            hTheme.unlock();
        }
        if (plf != null) {
            plf.unlock();
        }
        return tmp_ret;
    }
    public final native int GetThemeSysFont(long hTheme, int iFontId, long plf);


    public static class LOGFONTA extends CommonStructWrapper {

        public static final int sizeof = 60;

        LOGFONTA(boolean direct) {
            super(sizeof, direct);
        }
        LOGFONTA(VoidPointer base) {
            super(base);
        }
        LOGFONTA(long addr) {
            super(addr);
        }
        public final void set_lfHeight(int val) {
            byteBase.setInt32(0, val);
        }
        public final int get_lfHeight() {
            return byteBase.getInt32(0);
        }
        public final void set_lfWidth(int val) {
            byteBase.setInt32(4, val);
        }
        public final int get_lfWidth() {
            return byteBase.getInt32(4);
        }
        public final void set_lfEscapement(int val) {
            byteBase.setInt32(8, val);
        }
        public final int get_lfEscapement() {
            return byteBase.getInt32(8);
        }
        public final void set_lfOrientation(int val) {
            byteBase.setInt32(12, val);
        }
        public final int get_lfOrientation() {
            return byteBase.getInt32(12);
        }
        public final void set_lfWeight(int val) {
            byteBase.setInt32(16, val);
        }
        public final int get_lfWeight() {
            return byteBase.getInt32(16);
        }
        public final void set_lfItalic(byte val) {
            byteBase.set(20, val);
        }
        public final byte get_lfItalic() {
            return byteBase.get(20);
        }
        public final void set_lfUnderline(byte val) {
            byteBase.set(21, val);
        }
        public final byte get_lfUnderline() {
            return byteBase.get(21);
        }
        public final void set_lfStrikeOut(byte val) {
            byteBase.set(22, val);
        }
        public final byte get_lfStrikeOut() {
            return byteBase.get(22);
        }
        public final void set_lfCharSet(byte val) {
            byteBase.set(23, val);
        }
        public final byte get_lfCharSet() {
            return byteBase.get(23);
        }
        public final void set_lfOutPrecision(byte val) {
            byteBase.set(24, val);
        }
        public final byte get_lfOutPrecision() {
            return byteBase.get(24);
        }
        public final void set_lfClipPrecision(byte val) {
            byteBase.set(25, val);
        }
        public final byte get_lfClipPrecision() {
            return byteBase.get(25);
        }
        public final void set_lfQuality(byte val) {
            byteBase.set(26, val);
        }
        public final byte get_lfQuality() {
            return byteBase.get(26);
        }
        public final void set_lfPitchAndFamily(byte val) {
            byteBase.set(27, val);
        }
        public final byte get_lfPitchAndFamily() {
            return byteBase.get(27);
        }
        public final Int8Pointer get_lfFaceName() {
            return nb.createInt8Pointer(getElementPointer(28));
        }
        @Override
        public int size() {
            return sizeof;
        }
    }

    public final LOGFONTA createLOGFONTA(boolean direct) {
        return new LOGFONTA(direct);
    }
    public final LOGFONTA createLOGFONTA(VoidPointer base) {
        return new LOGFONTA(base);
    }
    public final LOGFONTA createLOGFONTA(long addr) {
        return new LOGFONTA(addr);
    }

    public final int SystemParametersInfoW(int uiAction, int uiParam, VoidPointer pvParam, int fWinIni) {
        long tmp_0 = pvParam == null ? 0 : pvParam.longLockPointer();
        int tmp_ret = SystemParametersInfoW(uiAction, uiParam, tmp_0, fWinIni);
        if (pvParam != null) {
            pvParam.unlock();
        }
        return tmp_ret;
    }
    public final native int SystemParametersInfoW(int uiAction, int uiParam, long pvParam, int fWinIni);

    public final native int GetCaretBlinkTime();

    public final long CreateDCW(String param_0, String param_1, String param_2, DEVMODEW param_3) {
        Int16Pointer _param_0 = null == param_0? null :  nb.createInt16Pointer(param_0, false);
        long tmp_0 = _param_0 == null ? 0 : _param_0.longLockPointer();
        Int16Pointer _param_1 = null == param_1? null :  nb.createInt16Pointer(param_1, false);
        long tmp_1 = _param_1 == null ? 0 : _param_1.longLockPointer();
        Int16Pointer _param_2 = null == param_2? null :  nb.createInt16Pointer(param_2, false);
        long tmp_2 = _param_2 == null ? 0 : _param_2.longLockPointer();
        long tmp_3 = param_3 == null ? 0 : param_3.longLockPointer();
        long tmp_ret = CreateDCW(tmp_0, tmp_1, tmp_2, tmp_3);
        if (_param_0 != null) {
            _param_0.unlock();
            _param_0.free();
        }
        if (_param_1 != null) {
            _param_1.unlock();
            _param_1.free();
        }
        if (_param_2 != null) {
            _param_2.unlock();
            _param_2.free();
        }
        if (param_3 != null) {
            param_3.unlock();
        }
        return tmp_ret;
    }
    public final long CreateDCW(Int16Pointer param_0, Int16Pointer param_1, Int16Pointer param_2, DEVMODEW param_3) {
        long tmp_0 = param_0 == null ? 0 : param_0.longLockPointer();
        long tmp_1 = param_1 == null ? 0 : param_1.longLockPointer();
        long tmp_2 = param_2 == null ? 0 : param_2.longLockPointer();
        long tmp_3 = param_3 == null ? 0 : param_3.longLockPointer();
        long tmp_ret = CreateDCW(tmp_0, tmp_1, tmp_2, tmp_3);
        if (param_0 != null) {
            param_0.unlock();
        }
        if (param_1 != null) {
            param_1.unlock();
        }
        if (param_2 != null) {
            param_2.unlock();
        }
        if (param_3 != null) {
            param_3.unlock();
        }
        return tmp_ret;
    }
    public final native long CreateDCW(long param_0, long param_1, long param_2, long param_3);


    public static class DEVMODEW extends CommonStructWrapper {

        public static final int sizeof = 220;

        DEVMODEW(boolean direct) {
            super(sizeof, direct);
        }
        DEVMODEW(VoidPointer base) {
            super(base);
        }
        DEVMODEW(long addr) {
            super(addr);
        }
        public final Int16Pointer get_dmDeviceName() {
            return nb.createInt16Pointer(getElementPointer(0));
        }
        public final void set_dmSpecVersion(short val) {
            byteBase.setInt16(64, val);
        }
        public final short get_dmSpecVersion() {
            return byteBase.getInt16(64);
        }
        public final void set_dmDriverVersion(short val) {
            byteBase.setInt16(66, val);
        }
        public final short get_dmDriverVersion() {
            return byteBase.getInt16(66);
        }
        public final void set_dmSize(short val) {
            byteBase.setInt16(68, val);
        }
        public final short get_dmSize() {
            return byteBase.getInt16(68);
        }
        public final void set_dmDriverExtra(short val) {
            byteBase.setInt16(70, val);
        }
        public final short get_dmDriverExtra() {
            return byteBase.getInt16(70);
        }
        public final void set_dmFields(int val) {
            byteBase.setInt32(72, val);
        }
        public final int get_dmFields() {
            return byteBase.getInt32(72);
        }
        public final void set_dmOrientation(short val) {
            byteBase.setInt16(76, val);
        }
        public final short get_dmOrientation() {
            return byteBase.getInt16(76);
        }
        public final void set_dmPaperSize(short val) {
            byteBase.setInt16(78, val);
        }
        public final short get_dmPaperSize() {
            return byteBase.getInt16(78);
        }
        public final void set_dmPaperLength(short val) {
            byteBase.setInt16(80, val);
        }
        public final short get_dmPaperLength() {
            return byteBase.getInt16(80);
        }
        public final void set_dmPaperWidth(short val) {
            byteBase.setInt16(82, val);
        }
        public final short get_dmPaperWidth() {
            return byteBase.getInt16(82);
        }
        public final void set_dmScale(short val) {
            byteBase.setInt16(84, val);
        }
        public final short get_dmScale() {
            return byteBase.getInt16(84);
        }
        public final void set_dmCopies(short val) {
            byteBase.setInt16(86, val);
        }
        public final short get_dmCopies() {
            return byteBase.getInt16(86);
        }
        public final void set_dmDefaultSource(short val) {
            byteBase.setInt16(88, val);
        }
        public final short get_dmDefaultSource() {
            return byteBase.getInt16(88);
        }
        public final void set_dmPrintQuality(short val) {
            byteBase.setInt16(90, val);
        }
        public final short get_dmPrintQuality() {
            return byteBase.getInt16(90);
        }
        public final POINTL get_dmPosition() {
            return instance.createPOINTL(getElementPointer(76));
        }
        public final void set_dmDisplayOrientation(int val) {
            byteBase.setInt32(84, val);
        }
        public final int get_dmDisplayOrientation() {
            return byteBase.getInt32(84);
        }
        public final void set_dmDisplayFixedOutput(int val) {
            byteBase.setInt32(88, val);
        }
        public final int get_dmDisplayFixedOutput() {
            return byteBase.getInt32(88);
        }
        public final void set_dmColor(short val) {
            byteBase.setInt16(92, val);
        }
        public final short get_dmColor() {
            return byteBase.getInt16(92);
        }
        public final void set_dmDuplex(short val) {
            byteBase.setInt16(94, val);
        }
        public final short get_dmDuplex() {
            return byteBase.getInt16(94);
        }
        public final void set_dmYResolution(short val) {
            byteBase.setInt16(96, val);
        }
        public final short get_dmYResolution() {
            return byteBase.getInt16(96);
        }
        public final void set_dmTTOption(short val) {
            byteBase.setInt16(98, val);
        }
        public final short get_dmTTOption() {
            return byteBase.getInt16(98);
        }
        public final void set_dmCollate(short val) {
            byteBase.setInt16(100, val);
        }
        public final short get_dmCollate() {
            return byteBase.getInt16(100);
        }
        public final Int16Pointer get_dmFormName() {
            return nb.createInt16Pointer(getElementPointer(102));
        }
        public final void set_dmLogPixels(short val) {
            byteBase.setInt16(166, val);
        }
        public final short get_dmLogPixels() {
            return byteBase.getInt16(166);
        }
        public final void set_dmBitsPerPel(int val) {
            byteBase.setInt32(168, val);
        }
        public final int get_dmBitsPerPel() {
            return byteBase.getInt32(168);
        }
        public final void set_dmPelsWidth(int val) {
            byteBase.setInt32(172, val);
        }
        public final int get_dmPelsWidth() {
            return byteBase.getInt32(172);
        }
        public final void set_dmPelsHeight(int val) {
            byteBase.setInt32(176, val);
        }
        public final int get_dmPelsHeight() {
            return byteBase.getInt32(176);
        }
        public final void set_dmDisplayFlags(int val) {
            byteBase.setInt32(180, val);
        }
        public final int get_dmDisplayFlags() {
            return byteBase.getInt32(180);
        }
        public final void set_dmNup(int val) {
            byteBase.setInt32(180, val);
        }
        public final int get_dmNup() {
            return byteBase.getInt32(180);
        }
        public final void set_dmDisplayFrequency(int val) {
            byteBase.setInt32(184, val);
        }
        public final int get_dmDisplayFrequency() {
            return byteBase.getInt32(184);
        }
        public final void set_dmICMMethod(int val) {
            byteBase.setInt32(188, val);
        }
        public final int get_dmICMMethod() {
            return byteBase.getInt32(188);
        }
        public final void set_dmICMIntent(int val) {
            byteBase.setInt32(192, val);
        }
        public final int get_dmICMIntent() {
            return byteBase.getInt32(192);
        }
        public final void set_dmMediaType(int val) {
            byteBase.setInt32(196, val);
        }
        public final int get_dmMediaType() {
            return byteBase.getInt32(196);
        }
        public final void set_dmDitherType(int val) {
            byteBase.setInt32(200, val);
        }
        public final int get_dmDitherType() {
            return byteBase.getInt32(200);
        }
        public final void set_dmReserved1(int val) {
            byteBase.setInt32(204, val);
        }
        public final int get_dmReserved1() {
            return byteBase.getInt32(204);
        }
        public final void set_dmReserved2(int val) {
            byteBase.setInt32(208, val);
        }
        public final int get_dmReserved2() {
            return byteBase.getInt32(208);
        }
        public final void set_dmPanningWidth(int val) {
            byteBase.setInt32(212, val);
        }
        public final int get_dmPanningWidth() {
            return byteBase.getInt32(212);
        }
        public final void set_dmPanningHeight(int val) {
            byteBase.setInt32(216, val);
        }
        public final int get_dmPanningHeight() {
            return byteBase.getInt32(216);
        }
        @Override
        public int size() {
            return sizeof;
        }
    }

    public final DEVMODEW createDEVMODEW(boolean direct) {
        return new DEVMODEW(direct);
    }
    public final DEVMODEW createDEVMODEW(VoidPointer base) {
        return new DEVMODEW(base);
    }
    public final DEVMODEW createDEVMODEW(long addr) {
        return new DEVMODEW(addr);
    }


    public static class POINTL extends CommonStructWrapper {

        public static final int sizeof = 8;

        POINTL(boolean direct) {
            super(sizeof, direct);
        }
        POINTL(VoidPointer base) {
            super(base);
        }
        POINTL(long addr) {
            super(addr);
        }
        public final void set_x(int val) {
            byteBase.setInt32(0, val);
        }
        public final int get_x() {
            return byteBase.getInt32(0);
        }
        public final void set_y(int val) {
            byteBase.setInt32(4, val);
        }
        public final int get_y() {
            return byteBase.getInt32(4);
        }
        @Override
        public int size() {
            return sizeof;
        }
    }

    public final POINTL createPOINTL(boolean direct) {
        return new POINTL(direct);
    }
    public final POINTL createPOINTL(VoidPointer base) {
        return new POINTL(base);
    }
    public final POINTL createPOINTL(long addr) {
        return new POINTL(addr);
    }

    public final native int Arc(long param_0, int param_1, int param_2, int param_3, int param_4, int param_5, int param_6, int param_7, int param_8);

    public final native int ImmReleaseContext(long param_0, long param_1);

    public final int PolyPolygon(long param_0, Win32.POINT param_1, Int32Pointer param_2, int param_3) {
        long tmp_0 = param_1 == null ? 0 : param_1.longLockPointer();
        long tmp_1 = param_2 == null ? 0 : param_2.longLockPointer();
        int tmp_ret = PolyPolygon(param_0, tmp_0, tmp_1, param_3);
        if (param_1 != null) {
            param_1.unlock();
        }
        if (param_2 != null) {
            param_2.unlock();
        }
        return tmp_ret;
    }
    public final native int PolyPolygon(long param_0, long param_1, long param_2, int param_3);

    public final native long CreatePen(int param_0, int param_1, int param_2);

    public final native short GetKeyState(int nVirtKey);

    public final long CreateIconIndirect(ICONINFO piconinfo) {
        long tmp_0 = piconinfo == null ? 0 : piconinfo.longLockPointer();
        long tmp_ret = CreateIconIndirect(tmp_0);
        if (piconinfo != null) {
            piconinfo.unlock();
        }
        return tmp_ret;
    }
    public final native long CreateIconIndirect(long piconinfo);


    public static class ICONINFO extends CommonStructWrapper {

        public static final int sizeof = NativeBridge.is64 ? 32 : 20;

        ICONINFO(boolean direct) {
            super(sizeof, direct);
        }
        ICONINFO(VoidPointer base) {
            super(base);
        }
        ICONINFO(long addr) {
            super(addr);
        }
        public final void set_fIcon(int val) {
            byteBase.setInt32(0, val);
        }
        public final int get_fIcon() {
            return byteBase.getInt32(0);
        }
        public final void set_xHotspot(int val) {
            byteBase.setInt32(4, val);
        }
        public final int get_xHotspot() {
            return byteBase.getInt32(4);
        }
        public final void set_yHotspot(int val) {
            byteBase.setInt32(8, val);
        }
        public final int get_yHotspot() {
            return byteBase.getInt32(8);
        }
        public final void set_hbmMask(long val) {
            byteBase.setAddress(NativeBridge.is64 ? 16 : 12, val);
        }
        public final long get_hbmMask() {
            return byteBase.getAddress(NativeBridge.is64 ? 16 : 12);
        }
        public final void set_hbmColor(long val) {
            byteBase.setAddress(NativeBridge.is64 ? 24 : 16, val);
        }
        public final long get_hbmColor() {
            return byteBase.getAddress(NativeBridge.is64 ? 24 : 16);
        }
        @Override
        public int size() {
            return sizeof;
        }
    }

    public final ICONINFO createICONINFO(boolean direct) {
        return new ICONINFO(direct);
    }
    public final ICONINFO createICONINFO(VoidPointer base) {
        return new ICONINFO(base);
    }
    public final ICONINFO createICONINFO(long addr) {
        return new ICONINFO(addr);
    }

    public final native int RoundRect(long param_0, int param_1, int param_2, int param_3, int param_4, int param_5, int param_6);

    public final long ExtCreateRegion(XFORM param_0, int param_1, RGNDATA param_2) {
        long tmp_0 = param_0 == null ? 0 : param_0.longLockPointer();
        long tmp_1 = param_2 == null ? 0 : param_2.longLockPointer();
        long tmp_ret = ExtCreateRegion(tmp_0, param_1, tmp_1);
        if (param_0 != null) {
            param_0.unlock();
        }
        if (param_2 != null) {
            param_2.unlock();
        }
        return tmp_ret;
    }
    public final native long ExtCreateRegion(long param_0, int param_1, long param_2);


    public static class RGNDATA extends CommonStructWrapper {

        public static final int sizeof = 36;

        RGNDATA(boolean direct) {
            super(sizeof, direct);
        }
        RGNDATA(VoidPointer base) {
            super(base);
        }
        RGNDATA(long addr) {
            super(addr);
        }
        public final RGNDATAHEADER get_rdh() {
            return instance.createRGNDATAHEADER(getElementPointer(0));
        }
        public final Int8Pointer get_Buffer() {
            return nb.createInt8Pointer(getElementPointer(32));
        }
        @Override
        public int size() {
            return sizeof;
        }
    }

    public final RGNDATA createRGNDATA(boolean direct) {
        return new RGNDATA(direct);
    }
    public final RGNDATA createRGNDATA(VoidPointer base) {
        return new RGNDATA(base);
    }
    public final RGNDATA createRGNDATA(long addr) {
        return new RGNDATA(addr);
    }


    public static class XFORM extends CommonStructWrapper {

        public static final int sizeof = 24;

        XFORM(boolean direct) {
            super(sizeof, direct);
        }
        XFORM(VoidPointer base) {
            super(base);
        }
        XFORM(long addr) {
            super(addr);
        }
        public final void set_eM11(float val) {
            byteBase.setFloat(0, val);
        }
        public final float get_eM11() {
            return byteBase.getFloat(0);
        }
        public final void set_eM12(float val) {
            byteBase.setFloat(4, val);
        }
        public final float get_eM12() {
            return byteBase.getFloat(4);
        }
        public final void set_eM21(float val) {
            byteBase.setFloat(8, val);
        }
        public final float get_eM21() {
            return byteBase.getFloat(8);
        }
        public final void set_eM22(float val) {
            byteBase.setFloat(12, val);
        }
        public final float get_eM22() {
            return byteBase.getFloat(12);
        }
        public final void set_eDx(float val) {
            byteBase.setFloat(16, val);
        }
        public final float get_eDx() {
            return byteBase.getFloat(16);
        }
        public final void set_eDy(float val) {
            byteBase.setFloat(20, val);
        }
        public final float get_eDy() {
            return byteBase.getFloat(20);
        }
        @Override
        public int size() {
            return sizeof;
        }
    }

    public final XFORM createXFORM(boolean direct) {
        return new XFORM(direct);
    }
    public final XFORM createXFORM(VoidPointer base) {
        return new XFORM(base);
    }
    public final XFORM createXFORM(long addr) {
        return new XFORM(addr);
    }


    public static class RGNDATAHEADER extends CommonStructWrapper {

        public static final int sizeof = 32;

        RGNDATAHEADER(boolean direct) {
            super(sizeof, direct);
        }
        RGNDATAHEADER(VoidPointer base) {
            super(base);
        }
        RGNDATAHEADER(long addr) {
            super(addr);
        }
        public final void set_dwSize(int val) {
            byteBase.setInt32(0, val);
        }
        public final int get_dwSize() {
            return byteBase.getInt32(0);
        }
        public final void set_iType(int val) {
            byteBase.setInt32(4, val);
        }
        public final int get_iType() {
            return byteBase.getInt32(4);
        }
        public final void set_nCount(int val) {
            byteBase.setInt32(8, val);
        }
        public final int get_nCount() {
            return byteBase.getInt32(8);
        }
        public final void set_nRgnSize(int val) {
            byteBase.setInt32(12, val);
        }
        public final int get_nRgnSize() {
            return byteBase.getInt32(12);
        }
        public final Win32.RECT get_rcBound() {
            return Win32.instance.createRECT(getElementPointer(16));
        }
        @Override
        public int size() {
            return sizeof;
        }
    }

    public final RGNDATAHEADER createRGNDATAHEADER(boolean direct) {
        return new RGNDATAHEADER(direct);
    }
    public final RGNDATAHEADER createRGNDATAHEADER(VoidPointer base) {
        return new RGNDATAHEADER(base);
    }
    public final RGNDATAHEADER createRGNDATAHEADER(long addr) {
        return new RGNDATAHEADER(addr);
    }

    public final int GetThemeSysInt(VoidPointer hTheme, int iIntId, Int32Pointer piValue) {
        long tmp_0 = hTheme == null ? 0 : hTheme.longLockPointer();
        long tmp_1 = piValue == null ? 0 : piValue.longLockPointer();
        int tmp_ret = GetThemeSysInt(tmp_0, iIntId, tmp_1);
        if (hTheme != null) {
            hTheme.unlock();
        }
        if (piValue != null) {
            piValue.unlock();
        }
        return tmp_ret;
    }
    public final native int GetThemeSysInt(long hTheme, int iIntId, long piValue);

    public final int TrackMouseEvent(TRACKMOUSEEVENT lpEventTrack) {
        long tmp_0 = lpEventTrack == null ? 0 : lpEventTrack.longLockPointer();
        int tmp_ret = TrackMouseEvent(tmp_0);
        if (lpEventTrack != null) {
            lpEventTrack.unlock();
        }
        return tmp_ret;
    }
    public final native int TrackMouseEvent(long lpEventTrack);


    public static class TRACKMOUSEEVENT extends CommonStructWrapper {

        public static final int sizeof = NativeBridge.is64 ? 24 : 16;

        TRACKMOUSEEVENT(boolean direct) {
            super(sizeof, direct);
        }
        TRACKMOUSEEVENT(VoidPointer base) {
            super(base);
        }
        TRACKMOUSEEVENT(long addr) {
            super(addr);
        }
        public final void set_cbSize(int val) {
            byteBase.setInt32(0, val);
        }
        public final int get_cbSize() {
            return byteBase.getInt32(0);
        }
        public final void set_dwFlags(int val) {
            byteBase.setInt32(4, val);
        }
        public final int get_dwFlags() {
            return byteBase.getInt32(4);
        }
        public final void set_hwndTrack(long val) {
            byteBase.setAddress(8, val);
        }
        public final long get_hwndTrack() {
            return byteBase.getAddress(8);
        }
        public final void set_dwHoverTime(int val) {
            byteBase.setInt32(NativeBridge.is64 ? 16 : 12, val);
        }
        public final int get_dwHoverTime() {
            return byteBase.getInt32(NativeBridge.is64 ? 16 : 12);
        }
        @Override
        public int size() {
            return sizeof;
        }
    }

    public final TRACKMOUSEEVENT createTRACKMOUSEEVENT(boolean direct) {
        return new TRACKMOUSEEVENT(direct);
    }
    public final TRACKMOUSEEVENT createTRACKMOUSEEVENT(VoidPointer base) {
        return new TRACKMOUSEEVENT(base);
    }
    public final TRACKMOUSEEVENT createTRACKMOUSEEVENT(long addr) {
        return new TRACKMOUSEEVENT(addr);
    }

    public final long CreateWindowExW(int dwExStyle, String lpClassName, String lpWindowName, int dwStyle, int X, int Y, int nWidth, int nHeight, long hWndParent, long hMenu, long hInstance, VoidPointer lpParam) {
        Int16Pointer _lpClassName = null == lpClassName? null :  nb.createInt16Pointer(lpClassName, false);
        long tmp_0 = _lpClassName == null ? 0 : _lpClassName.longLockPointer();
        Int16Pointer _lpWindowName = null == lpWindowName? null :  nb.createInt16Pointer(lpWindowName, false);
        long tmp_1 = _lpWindowName == null ? 0 : _lpWindowName.longLockPointer();
        long tmp_2 = lpParam == null ? 0 : lpParam.longLockPointer();
        long tmp_ret = CreateWindowExW(dwExStyle, tmp_0, tmp_1, dwStyle, X, Y, nWidth, nHeight, hWndParent, hMenu, hInstance, tmp_2);
        if (_lpClassName != null) {
            _lpClassName.unlock();
            _lpClassName.free();
        }
        if (_lpWindowName != null) {
            _lpWindowName.unlock();
            _lpWindowName.free();
        }
        if (lpParam != null) {
            lpParam.unlock();
        }
        return tmp_ret;
    }
    public final long CreateWindowExW(int dwExStyle, Int16Pointer lpClassName, Int16Pointer lpWindowName, int dwStyle, int X, int Y, int nWidth, int nHeight, long hWndParent, long hMenu, long hInstance, VoidPointer lpParam) {
        long tmp_0 = lpClassName == null ? 0 : lpClassName.longLockPointer();
        long tmp_1 = lpWindowName == null ? 0 : lpWindowName.longLockPointer();
        long tmp_2 = lpParam == null ? 0 : lpParam.longLockPointer();
        long tmp_ret = CreateWindowExW(dwExStyle, tmp_0, tmp_1, dwStyle, X, Y, nWidth, nHeight, hWndParent, hMenu, hInstance, tmp_2);
        if (lpClassName != null) {
            lpClassName.unlock();
        }
        if (lpWindowName != null) {
            lpWindowName.unlock();
        }
        if (lpParam != null) {
            lpParam.unlock();
        }
        return tmp_ret;
    }
    public final native long CreateWindowExW(int dwExStyle, long lpClassName, long lpWindowName, int dwStyle, int X, int Y, int nWidth, int nHeight, long hWndParent, long hMenu, long hInstance, long lpParam);

    public final native long SetClipboardViewer(long hWndNewViewer);

    public final native int Ellipse(long param_0, int param_1, int param_2, int param_3, int param_4);

    public final native int GetLastError();

    public final void SHGetSettings(SHELLFLAGSTATE lpsfs, int dwMask) {
        long tmp_0 = lpsfs == null ? 0 : lpsfs.longLockPointer();
        SHGetSettings(tmp_0, dwMask);
        if (lpsfs != null) {
            lpsfs.unlock();
        }
    }
    public final native void SHGetSettings(long lpsfs, int dwMask);


    public static class SHELLFLAGSTATE extends CommonStructWrapper {

        public static final int sizeof = 56;

        SHELLFLAGSTATE(boolean direct) {
            super(sizeof, direct);
        }
        SHELLFLAGSTATE(VoidPointer base) {
            super(base);
        }
        SHELLFLAGSTATE(long addr) {
            super(addr);
        }
        public final void set_fShowAllObjects(int val) {
            byteBase.setInt32(0, val);
        }
        public final int get_fShowAllObjects() {
            return byteBase.getInt32(0);
        }
        public final void set_fShowExtensions(int val) {
            byteBase.setInt32(4, val);
        }
        public final int get_fShowExtensions() {
            return byteBase.getInt32(4);
        }
        public final void set_fNoConfirmRecycle(int val) {
            byteBase.setInt32(8, val);
        }
        public final int get_fNoConfirmRecycle() {
            return byteBase.getInt32(8);
        }
        public final void set_fShowSysFiles(int val) {
            byteBase.setInt32(12, val);
        }
        public final int get_fShowSysFiles() {
            return byteBase.getInt32(12);
        }
        public final void set_fShowCompColor(int val) {
            byteBase.setInt32(16, val);
        }
        public final int get_fShowCompColor() {
            return byteBase.getInt32(16);
        }
        public final void set_fDoubleClickInWebView(int val) {
            byteBase.setInt32(20, val);
        }
        public final int get_fDoubleClickInWebView() {
            return byteBase.getInt32(20);
        }
        public final void set_fDesktopHTML(int val) {
            byteBase.setInt32(24, val);
        }
        public final int get_fDesktopHTML() {
            return byteBase.getInt32(24);
        }
        public final void set_fWin95Classic(int val) {
            byteBase.setInt32(28, val);
        }
        public final int get_fWin95Classic() {
            return byteBase.getInt32(28);
        }
        public final void set_fDontPrettyPath(int val) {
            byteBase.setInt32(32, val);
        }
        public final int get_fDontPrettyPath() {
            return byteBase.getInt32(32);
        }
        public final void set_fShowAttribCol(int val) {
            byteBase.setInt32(36, val);
        }
        public final int get_fShowAttribCol() {
            return byteBase.getInt32(36);
        }
        public final void set_fMapNetDrvBtn(int val) {
            byteBase.setInt32(40, val);
        }
        public final int get_fMapNetDrvBtn() {
            return byteBase.getInt32(40);
        }
        public final void set_fShowInfoTip(int val) {
            byteBase.setInt32(44, val);
        }
        public final int get_fShowInfoTip() {
            return byteBase.getInt32(44);
        }
        public final void set_fHideIcons(int val) {
            byteBase.setInt32(48, val);
        }
        public final int get_fHideIcons() {
            return byteBase.getInt32(48);
        }
        public final void set_fRestFlags(int val) {
            byteBase.setInt32(52, val);
        }
        public final int get_fRestFlags() {
            return byteBase.getInt32(52);
        }
        @Override
        public int size() {
            return sizeof;
        }
    }

    public final SHELLFLAGSTATE createSHELLFLAGSTATE(boolean direct) {
        return new SHELLFLAGSTATE(direct);
    }
    public final SHELLFLAGSTATE createSHELLFLAGSTATE(VoidPointer base) {
        return new SHELLFLAGSTATE(base);
    }
    public final SHELLFLAGSTATE createSHELLFLAGSTATE(long addr) {
        return new SHELLFLAGSTATE(addr);
    }

    public final native long ImmAssociateContext(long param_0, long param_1);

    public final native long ImmGetContext(long param_0);

    public final native int GetPixel(long param_0, int param_1, int param_2);

    public final native long GetDC(long hWnd);

    public final native int GetBkMode(long param_0);

    public final native long GetStockObject(int param_0);

    public final native int ValidateRgn(long hWnd, long hRgn);

    public final native void keybd_event(byte bVk, byte bScan, int dwFlags, long dwExtraInfo);

    public final int DrawThemeBackground(VoidPointer hTheme, long hdc, int iPartId, int iStateId, Win32.RECT pRect, Win32.RECT pClipRect) {
        long tmp_0 = hTheme == null ? 0 : hTheme.longLockPointer();
        long tmp_1 = pRect == null ? 0 : pRect.longLockPointer();
        long tmp_2 = pClipRect == null ? 0 : pClipRect.longLockPointer();
        int tmp_ret = DrawThemeBackground(tmp_0, hdc, iPartId, iStateId, tmp_1, tmp_2);
        if (hTheme != null) {
            hTheme.unlock();
        }
        if (pRect != null) {
            pRect.unlock();
        }
        if (pClipRect != null) {
            pClipRect.unlock();
        }
        return tmp_ret;
    }
    public final native int DrawThemeBackground(long hTheme, long hdc, int iPartId, int iStateId, long pRect, long pClipRect);

    public final int GetMonitorInfoW(long hMonitor, MONITORINFO lpmi) {
        long tmp_0 = lpmi == null ? 0 : lpmi.longLockPointer();
        int tmp_ret = GetMonitorInfoW(hMonitor, tmp_0);
        if (lpmi != null) {
            lpmi.unlock();
        }
        return tmp_ret;
    }
    public final native int GetMonitorInfoW(long hMonitor, long lpmi);


    public static class MONITORINFO extends CommonStructWrapper {

        public static final int sizeof = 40;

        MONITORINFO(boolean direct) {
            super(sizeof, direct);
        }
        MONITORINFO(VoidPointer base) {
            super(base);
        }
        MONITORINFO(long addr) {
            super(addr);
        }
        public final void set_cbSize(int val) {
            byteBase.setInt32(0, val);
        }
        public final int get_cbSize() {
            return byteBase.getInt32(0);
        }
        public final Win32.RECT get_rcMonitor() {
            return Win32.instance.createRECT(getElementPointer(4));
        }
        public final Win32.RECT get_rcWork() {
            return Win32.instance.createRECT(getElementPointer(20));
        }
        public final void set_dwFlags(int val) {
            byteBase.setInt32(36, val);
        }
        public final int get_dwFlags() {
            return byteBase.getInt32(36);
        }
        @Override
        public int size() {
            return sizeof;
        }
    }

    public final MONITORINFO createMONITORINFO(boolean direct) {
        return new MONITORINFO(direct);
    }
    public final MONITORINFO createMONITORINFO(VoidPointer base) {
        return new MONITORINFO(base);
    }
    public final MONITORINFO createMONITORINFO(long addr) {
        return new MONITORINFO(addr);
    }

    public final native int GetCurrentThreadId();

    public final native int DeleteDC(long param_0);

    public final long SHGetFileInfoW(String pszPath, int dwFileAttributes, SHFILEINFOW psfi, int cbFileInfo, int uFlags) {
        Int16Pointer _pszPath = null == pszPath? null :  nb.createInt16Pointer(pszPath, false);
        long tmp_0 = _pszPath == null ? 0 : _pszPath.longLockPointer();
        long tmp_1 = psfi == null ? 0 : psfi.longLockPointer();
        long tmp_ret = SHGetFileInfoW(tmp_0, dwFileAttributes, tmp_1, cbFileInfo, uFlags);
        if (_pszPath != null) {
            _pszPath.unlock();
            _pszPath.free();
        }
        if (psfi != null) {
            psfi.unlock();
        }
        return tmp_ret;
    }
    public final long SHGetFileInfoW(Int16Pointer pszPath, int dwFileAttributes, SHFILEINFOW psfi, int cbFileInfo, int uFlags) {
        long tmp_0 = pszPath == null ? 0 : pszPath.longLockPointer();
        long tmp_1 = psfi == null ? 0 : psfi.longLockPointer();
        long tmp_ret = SHGetFileInfoW(tmp_0, dwFileAttributes, tmp_1, cbFileInfo, uFlags);
        if (pszPath != null) {
            pszPath.unlock();
        }
        if (psfi != null) {
            psfi.unlock();
        }
        return tmp_ret;
    }
    public final native long SHGetFileInfoW(long pszPath, int dwFileAttributes, long psfi, int cbFileInfo, int uFlags);


    public static class SHFILEINFOW extends CommonStructWrapper {

        public static final int sizeof = NativeBridge.is64 ? 696 : 692;

        SHFILEINFOW(boolean direct) {
            super(sizeof, direct);
        }
        SHFILEINFOW(VoidPointer base) {
            super(base);
        }
        SHFILEINFOW(long addr) {
            super(addr);
        }
        public final void set_hIcon(long val) {
            byteBase.setAddress(0, val);
        }
        public final long get_hIcon() {
            return byteBase.getAddress(0);
        }
        public final void set_iIcon(int val) {
            byteBase.setInt32(NativeBridge.is64 ? 8 : 4, val);
        }
        public final int get_iIcon() {
            return byteBase.getInt32(NativeBridge.is64 ? 8 : 4);
        }
        public final void set_dwAttributes(int val) {
            byteBase.setInt32(NativeBridge.is64 ? 12 : 8, val);
        }
        public final int get_dwAttributes() {
            return byteBase.getInt32(NativeBridge.is64 ? 12 : 8);
        }
        public final Int16Pointer get_szDisplayName() {
            return nb.createInt16Pointer(getElementPointer(NativeBridge.is64 ? 16 : 12));
        }
        public final Int16Pointer get_szTypeName() {
            return nb.createInt16Pointer(getElementPointer(NativeBridge.is64 ? 536 : 532));
        }
        @Override
        public int size() {
            return sizeof;
        }
    }

    public final SHFILEINFOW createSHFILEINFOW(boolean direct) {
        return new SHFILEINFOW(direct);
    }
    public final SHFILEINFOW createSHFILEINFOW(VoidPointer base) {
        return new SHFILEINFOW(base);
    }
    public final SHFILEINFOW createSHFILEINFOW(long addr) {
        return new SHFILEINFOW(addr);
    }

    public final long DispatchMessageW(Win32.MSG lpMsg) {
        long tmp_0 = lpMsg == null ? 0 : lpMsg.longLockPointer();
        long tmp_ret = DispatchMessageW(tmp_0);
        if (lpMsg != null) {
            lpMsg.unlock();
        }
        return tmp_ret;
    }
    public final native long DispatchMessageW(long lpMsg);

    public final native int PostThreadMessageW(int idThread, int Msg, long wParam, long lParam);

    public final native int GetSysColor(int nIndex);

    public final native long GetSystemMenu(long hWnd, int bRevert);

    public final int SetPixelFormat(long param_0, int param_1, PIXELFORMATDESCRIPTOR param_2) {
        long tmp_0 = param_2 == null ? 0 : param_2.longLockPointer();
        int tmp_ret = SetPixelFormat(param_0, param_1, tmp_0);
        if (param_2 != null) {
            param_2.unlock();
        }
        return tmp_ret;
    }
    public final native int SetPixelFormat(long param_0, int param_1, long param_2);


    public static class PIXELFORMATDESCRIPTOR extends CommonStructWrapper {

        public static final int sizeof = 40;

        PIXELFORMATDESCRIPTOR(boolean direct) {
            super(sizeof, direct);
        }
        PIXELFORMATDESCRIPTOR(VoidPointer base) {
            super(base);
        }
        PIXELFORMATDESCRIPTOR(long addr) {
            super(addr);
        }
        public final void set_nSize(short val) {
            byteBase.setInt16(0, val);
        }
        public final short get_nSize() {
            return byteBase.getInt16(0);
        }
        public final void set_nVersion(short val) {
            byteBase.setInt16(2, val);
        }
        public final short get_nVersion() {
            return byteBase.getInt16(2);
        }
        public final void set_dwFlags(int val) {
            byteBase.setInt32(4, val);
        }
        public final int get_dwFlags() {
            return byteBase.getInt32(4);
        }
        public final void set_iPixelType(byte val) {
            byteBase.set(8, val);
        }
        public final byte get_iPixelType() {
            return byteBase.get(8);
        }
        public final void set_cColorBits(byte val) {
            byteBase.set(9, val);
        }
        public final byte get_cColorBits() {
            return byteBase.get(9);
        }
        public final void set_cRedBits(byte val) {
            byteBase.set(10, val);
        }
        public final byte get_cRedBits() {
            return byteBase.get(10);
        }
        public final void set_cRedShift(byte val) {
            byteBase.set(11, val);
        }
        public final byte get_cRedShift() {
            return byteBase.get(11);
        }
        public final void set_cGreenBits(byte val) {
            byteBase.set(12, val);
        }
        public final byte get_cGreenBits() {
            return byteBase.get(12);
        }
        public final void set_cGreenShift(byte val) {
            byteBase.set(13, val);
        }
        public final byte get_cGreenShift() {
            return byteBase.get(13);
        }
        public final void set_cBlueBits(byte val) {
            byteBase.set(14, val);
        }
        public final byte get_cBlueBits() {
            return byteBase.get(14);
        }
        public final void set_cBlueShift(byte val) {
            byteBase.set(15, val);
        }
        public final byte get_cBlueShift() {
            return byteBase.get(15);
        }
        public final void set_cAlphaBits(byte val) {
            byteBase.set(16, val);
        }
        public final byte get_cAlphaBits() {
            return byteBase.get(16);
        }
        public final void set_cAlphaShift(byte val) {
            byteBase.set(17, val);
        }
        public final byte get_cAlphaShift() {
            return byteBase.get(17);
        }
        public final void set_cAccumBits(byte val) {
            byteBase.set(18, val);
        }
        public final byte get_cAccumBits() {
            return byteBase.get(18);
        }
        public final void set_cAccumRedBits(byte val) {
            byteBase.set(19, val);
        }
        public final byte get_cAccumRedBits() {
            return byteBase.get(19);
        }
        public final void set_cAccumGreenBits(byte val) {
            byteBase.set(20, val);
        }
        public final byte get_cAccumGreenBits() {
            return byteBase.get(20);
        }
        public final void set_cAccumBlueBits(byte val) {
            byteBase.set(21, val);
        }
        public final byte get_cAccumBlueBits() {
            return byteBase.get(21);
        }
        public final void set_cAccumAlphaBits(byte val) {
            byteBase.set(22, val);
        }
        public final byte get_cAccumAlphaBits() {
            return byteBase.get(22);
        }
        public final void set_cDepthBits(byte val) {
            byteBase.set(23, val);
        }
        public final byte get_cDepthBits() {
            return byteBase.get(23);
        }
        public final void set_cStencilBits(byte val) {
            byteBase.set(24, val);
        }
        public final byte get_cStencilBits() {
            return byteBase.get(24);
        }
        public final void set_cAuxBuffers(byte val) {
            byteBase.set(25, val);
        }
        public final byte get_cAuxBuffers() {
            return byteBase.get(25);
        }
        public final void set_iLayerType(byte val) {
            byteBase.set(26, val);
        }
        public final byte get_iLayerType() {
            return byteBase.get(26);
        }
        public final void set_bReserved(byte val) {
            byteBase.set(27, val);
        }
        public final byte get_bReserved() {
            return byteBase.get(27);
        }
        public final void set_dwLayerMask(int val) {
            byteBase.setInt32(28, val);
        }
        public final int get_dwLayerMask() {
            return byteBase.getInt32(28);
        }
        public final void set_dwVisibleMask(int val) {
            byteBase.setInt32(32, val);
        }
        public final int get_dwVisibleMask() {
            return byteBase.getInt32(32);
        }
        public final void set_dwDamageMask(int val) {
            byteBase.setInt32(36, val);
        }
        public final int get_dwDamageMask() {
            return byteBase.getInt32(36);
        }
        @Override
        public int size() {
            return sizeof;
        }
    }

    public final PIXELFORMATDESCRIPTOR createPIXELFORMATDESCRIPTOR(boolean direct) {
        return new PIXELFORMATDESCRIPTOR(direct);
    }
    public final PIXELFORMATDESCRIPTOR createPIXELFORMATDESCRIPTOR(VoidPointer base) {
        return new PIXELFORMATDESCRIPTOR(base);
    }
    public final PIXELFORMATDESCRIPTOR createPIXELFORMATDESCRIPTOR(long addr) {
        return new PIXELFORMATDESCRIPTOR(addr);
    }

    public final int GetCursorPos(Win32.POINT lpPoint) {
        long tmp_0 = lpPoint == null ? 0 : lpPoint.longLockPointer();
        int tmp_ret = GetCursorPos(tmp_0);
        if (lpPoint != null) {
            lpPoint.unlock();
        }
        return tmp_ret;
    }
    public final native int GetCursorPos(long lpPoint);

    public final native int PatBlt(long param_0, int param_1, int param_2, int param_3, int param_4, int param_5);

    public final native long SetCursor(long hCursor);

    public final int AppendMenuW(long hMenu, int uFlags, long uIDNewItem, String lpNewItem) {
        Int16Pointer _lpNewItem = null == lpNewItem? null :  nb.createInt16Pointer(lpNewItem, false);
        long tmp_0 = _lpNewItem == null ? 0 : _lpNewItem.longLockPointer();
        int tmp_ret = AppendMenuW(hMenu, uFlags, uIDNewItem, tmp_0);
        if (_lpNewItem != null) {
            _lpNewItem.unlock();
            _lpNewItem.free();
        }
        return tmp_ret;
    }
    public final int AppendMenuW(long hMenu, int uFlags, long uIDNewItem, Int16Pointer lpNewItem) {
        long tmp_0 = lpNewItem == null ? 0 : lpNewItem.longLockPointer();
        int tmp_ret = AppendMenuW(hMenu, uFlags, uIDNewItem, tmp_0);
        if (lpNewItem != null) {
            lpNewItem.unlock();
        }
        return tmp_ret;
    }
    public final native int AppendMenuW(long hMenu, int uFlags, long uIDNewItem, long lpNewItem);

    public final int SetWindowPlacement(long hWnd, WINDOWPLACEMENT lpwndpl) {
        long tmp_0 = lpwndpl == null ? 0 : lpwndpl.longLockPointer();
        int tmp_ret = SetWindowPlacement(hWnd, tmp_0);
        if (lpwndpl != null) {
            lpwndpl.unlock();
        }
        return tmp_ret;
    }
    public final native int SetWindowPlacement(long hWnd, long lpwndpl);


    public static class WINDOWPLACEMENT extends CommonStructWrapper {

        public static final int sizeof = 44;

        WINDOWPLACEMENT(boolean direct) {
            super(sizeof, direct);
        }
        WINDOWPLACEMENT(VoidPointer base) {
            super(base);
        }
        WINDOWPLACEMENT(long addr) {
            super(addr);
        }
        public final void set_length(int val) {
            byteBase.setInt32(0, val);
        }
        public final int get_length() {
            return byteBase.getInt32(0);
        }
        public final void set_flags(int val) {
            byteBase.setInt32(4, val);
        }
        public final int get_flags() {
            return byteBase.getInt32(4);
        }
        public final void set_showCmd(int val) {
            byteBase.setInt32(8, val);
        }
        public final int get_showCmd() {
            return byteBase.getInt32(8);
        }
        public final Win32.POINT get_ptMinPosition() {
            return Win32.instance.createPOINT(getElementPointer(12));
        }
        public final Win32.POINT get_ptMaxPosition() {
            return Win32.instance.createPOINT(getElementPointer(20));
        }
        public final Win32.RECT get_rcNormalPosition() {
            return Win32.instance.createRECT(getElementPointer(28));
        }
        @Override
        public int size() {
            return sizeof;
        }
    }

    public final WINDOWPLACEMENT createWINDOWPLACEMENT(boolean direct) {
        return new WINDOWPLACEMENT(direct);
    }
    public final WINDOWPLACEMENT createWINDOWPLACEMENT(VoidPointer base) {
        return new WINDOWPLACEMENT(base);
    }
    public final WINDOWPLACEMENT createWINDOWPLACEMENT(long addr) {
        return new WINDOWPLACEMENT(addr);
    }

    public final native long ActivateKeyboardLayout(long hkl, int Flags);

    public final native int CommDlgExtendedError();

    public final int GlobalUnlock(VoidPointer hMem) {
        long tmp_0 = hMem == null ? 0 : hMem.longLockPointer();
        int tmp_ret = GlobalUnlock(tmp_0);
        if (hMem != null) {
            hMem.unlock();
        }
        return tmp_ret;
    }
    public final native int GlobalUnlock(long hMem);

    public final native int SetROP2(long param_0, int param_1);

    public final int SHBindToParent(ITEMIDLIST pidl, GUID riid, PointerPointer ppv, PointerPointer ppidlLast) {
        long tmp_0 = pidl == null ? 0 : pidl.longLockPointer();
        long tmp_1 = riid == null ? 0 : riid.longLockPointer();
        long tmp_2 = ppv == null ? 0 : ppv.longLockPointer();
        long tmp_3 = ppidlLast == null ? 0 : ppidlLast.longLockPointer();
        int tmp_ret = SHBindToParent(tmp_0, tmp_1, tmp_2, tmp_3);
        if (pidl != null) {
            pidl.unlock();
        }
        if (riid != null) {
            riid.unlock();
        }
        if (ppv != null) {
            ppv.unlock();
        }
        if (ppidlLast != null) {
            ppidlLast.unlock();
        }
        return tmp_ret;
    }
    public final native int SHBindToParent(long pidl, long riid, long ppv, long ppidlLast);


    public static class GUID extends CommonStructWrapper {

        public static final int sizeof = 16;

        GUID(boolean direct) {
            super(sizeof, direct);
        }
        GUID(VoidPointer base) {
            super(base);
        }
        GUID(long addr) {
            super(addr);
        }
        public final void set_Data1(int val) {
            byteBase.setInt32(0, val);
        }
        public final int get_Data1() {
            return byteBase.getInt32(0);
        }
        public final void set_Data2(short val) {
            byteBase.setInt16(4, val);
        }
        public final short get_Data2() {
            return byteBase.getInt16(4);
        }
        public final void set_Data3(short val) {
            byteBase.setInt16(6, val);
        }
        public final short get_Data3() {
            return byteBase.getInt16(6);
        }
        public final Int8Pointer get_Data4() {
            return nb.createInt8Pointer(getElementPointer(8));
        }
        @Override
        public int size() {
            return sizeof;
        }
    }

    public final GUID createGUID(boolean direct) {
        return new GUID(direct);
    }
    public final GUID createGUID(VoidPointer base) {
        return new GUID(base);
    }
    public final GUID createGUID(long addr) {
        return new GUID(addr);
    }


    public static class ITEMIDLIST extends CommonStructWrapper {

        public static final int sizeof = 4;

        ITEMIDLIST(boolean direct) {
            super(sizeof, direct);
        }
        ITEMIDLIST(VoidPointer base) {
            super(base);
        }
        ITEMIDLIST(long addr) {
            super(addr);
        }
        public final SHITEMID get_mkid() {
            return instance.createSHITEMID(getElementPointer(0));
        }
        @Override
        public int size() {
            return sizeof;
        }
    }

    public final ITEMIDLIST createITEMIDLIST(boolean direct) {
        return new ITEMIDLIST(direct);
    }
    public final ITEMIDLIST createITEMIDLIST(VoidPointer base) {
        return new ITEMIDLIST(base);
    }
    public final ITEMIDLIST createITEMIDLIST(long addr) {
        return new ITEMIDLIST(addr);
    }


    public static class SHITEMID extends CommonStructWrapper {

        public static final int sizeof = 4;

        SHITEMID(boolean direct) {
            super(sizeof, direct);
        }
        SHITEMID(VoidPointer base) {
            super(base);
        }
        SHITEMID(long addr) {
            super(addr);
        }
        public final void set_cb(short val) {
            byteBase.setInt16(0, val);
        }
        public final short get_cb() {
            return byteBase.getInt16(0);
        }
        public final Int8Pointer get_abID() {
            return nb.createInt8Pointer(getElementPointer(2));
        }
        @Override
        public int size() {
            return sizeof;
        }
    }

    public final SHITEMID createSHITEMID(boolean direct) {
        return new SHITEMID(direct);
    }
    public final SHITEMID createSHITEMID(VoidPointer base) {
        return new SHITEMID(base);
    }
    public final SHITEMID createSHITEMID(long addr) {
        return new SHITEMID(addr);
    }

    public final int InSendMessageEx(VoidPointer lpReserved) {
        long tmp_0 = lpReserved == null ? 0 : lpReserved.longLockPointer();
        int tmp_ret = InSendMessageEx(tmp_0);
        if (lpReserved != null) {
            lpReserved.unlock();
        }
        return tmp_ret;
    }
    public final native int InSendMessageEx(long lpReserved);

    public final int GetLocaleInfoW(int Locale, int LCType, Int16Pointer lpLCData, int cchData) {
        long tmp_0 = lpLCData == null ? 0 : lpLCData.longLockPointer();
        int tmp_ret = GetLocaleInfoW(Locale, LCType, tmp_0, cchData);
        if (lpLCData != null) {
            lpLCData.unlock();
        }
        return tmp_ret;
    }
    public final native int GetLocaleInfoW(int Locale, int LCType, long lpLCData, int cchData);

    public final int SHGetDataFromIDListW(IShellFolder psf, Win32.ITEMIDLIST pidl, int nFormat, VoidPointer pv, int cb) {
        long tmp_0 = psf == null ? 0 : psf.longLockPointer();
        long tmp_1 = pidl == null ? 0 : pidl.longLockPointer();
        long tmp_2 = pv == null ? 0 : pv.longLockPointer();
        int tmp_ret = SHGetDataFromIDListW(tmp_0, tmp_1, nFormat, tmp_2, cb);
        if (psf != null) {
            psf.unlock();
        }
        if (pidl != null) {
            pidl.unlock();
        }
        if (pv != null) {
            pv.unlock();
        }
        return tmp_ret;
    }
    public final native int SHGetDataFromIDListW(long psf, long pidl, int nFormat, long pv, int cb);


    public static class IShellFolder extends CommonStructWrapper {

        public static final int sizeof = NativeBridge.is64 ? 8 : 4;

        IShellFolderVtbl vtbl;
        IShellFolder(long addr) {
            super(addr);
            vtbl = get_lpVtbl();
        }
        public final IShellFolderVtbl get_lpVtbl() {
            return instance.createIShellFolderVtbl(byteBase.getAddress(0));
        }
        public final int QueryInterface(Win32.GUID riid, PointerPointer ppvObject) {
            return vtbl.QueryInterface(this, riid, ppvObject);
        }
        public final int AddRef() {
            return vtbl.AddRef(this);
        }
        public final int Release() {
            return vtbl.Release(this);
        }
        public final int ParseDisplayName(long hwnd, IBindCtx pbc, Int16Pointer pszDisplayName, Int32Pointer pchEaten, PointerPointer ppidl, Int32Pointer pdwAttributes) {
            return vtbl.ParseDisplayName(this, hwnd, pbc, pszDisplayName, pchEaten, ppidl, pdwAttributes);
        }
        public final int EnumObjects(long hwnd, int grfFlags, PointerPointer ppenumIDList) {
            return vtbl.EnumObjects(this, hwnd, grfFlags, ppenumIDList);
        }
        public final int BindToObject(Win32.ITEMIDLIST pidl, IBindCtx pbc, Win32.GUID riid, PointerPointer ppv) {
            return vtbl.BindToObject(this, pidl, pbc, riid, ppv);
        }
        public final int BindToStorage(Win32.ITEMIDLIST pidl, IBindCtx pbc, Win32.GUID riid, PointerPointer ppv) {
            return vtbl.BindToStorage(this, pidl, pbc, riid, ppv);
        }
        public final int CompareIDs(long lParam, Win32.ITEMIDLIST pidl1, Win32.ITEMIDLIST pidl2) {
            return vtbl.CompareIDs(this, lParam, pidl1, pidl2);
        }
        public final int CreateViewObject(long hwndOwner, Win32.GUID riid, PointerPointer ppv) {
            return vtbl.CreateViewObject(this, hwndOwner, riid, ppv);
        }
        public final int GetAttributesOf(int cidl, PointerPointer apidl, Int32Pointer rgfInOut) {
            return vtbl.GetAttributesOf(this, cidl, apidl, rgfInOut);
        }
        public final int GetUIObjectOf(long hwndOwner, int cidl, PointerPointer apidl, Win32.GUID riid, Int32Pointer rgfReserved, PointerPointer ppv) {
            return vtbl.GetUIObjectOf(this, hwndOwner, cidl, apidl, riid, rgfReserved, ppv);
        }
        public final int GetDisplayNameOf(Win32.ITEMIDLIST pidl, int uFlags, STRRET pName) {
            return vtbl.GetDisplayNameOf(this, pidl, uFlags, pName);
        }
        public final int SetNameOf(long hwnd, Win32.ITEMIDLIST pidl, String pszName, int uFlags, PointerPointer ppidlOut) {
            return vtbl.SetNameOf(this, hwnd, pidl, pszName, uFlags, ppidlOut);
        }
        public final int SetNameOf(long hwnd, Win32.ITEMIDLIST pidl, Int16Pointer pszName, int uFlags, PointerPointer ppidlOut) {
            return vtbl.SetNameOf(this, hwnd, pidl, pszName, uFlags, ppidlOut);
        }
        @Override
        public int size() {
            return sizeof;
        }
    }

    public final IShellFolder createIShellFolder(long addr) {
        return new IShellFolder(addr);
    }


    public static class STRRET extends CommonStructWrapper {

        public static final int sizeof = NativeBridge.is64 ? 272 : 264;

        STRRET(boolean direct) {
            super(sizeof, direct);
        }
        STRRET(VoidPointer base) {
            super(base);
        }
        STRRET(long addr) {
            super(addr);
        }
        public final void set_uType(int val) {
            byteBase.setInt32(0, val);
        }
        public final int get_uType() {
            return byteBase.getInt32(0);
        }
        public final void set_pOleStr(Int16Pointer val) {
            byteBase.setPointer(NativeBridge.is64 ? 8 : 4, val);
        }
        public final Int16Pointer get_pOleStr() {
            return nb.createInt16Pointer(byteBase.getAddress(NativeBridge.is64 ? 8 : 4));
        }
        public final void set_uOffset(int val) {
            byteBase.setInt32(NativeBridge.is64 ? 8 : 4, val);
        }
        public final int get_uOffset() {
            return byteBase.getInt32(NativeBridge.is64 ? 8 : 4);
        }
        public final Int8Pointer get_cStr() {
            return nb.createInt8Pointer(getElementPointer(NativeBridge.is64 ? 8 : 4));
        }
        @Override
        public int size() {
            return sizeof;
        }
    }

    public final STRRET createSTRRET(boolean direct) {
        return new STRRET(direct);
    }
    public final STRRET createSTRRET(VoidPointer base) {
        return new STRRET(base);
    }
    public final STRRET createSTRRET(long addr) {
        return new STRRET(addr);
    }


    public static class IBindCtx extends CommonStructWrapper {

        public static final int sizeof = NativeBridge.is64 ? 8 : 4;

        IBindCtxVtbl vtbl;
        IBindCtx(long addr) {
            super(addr);
            vtbl = get_lpVtbl();
        }
        public final IBindCtxVtbl get_lpVtbl() {
            return instance.createIBindCtxVtbl(byteBase.getAddress(0));
        }
        public final int QueryInterface(Win32.GUID riid, PointerPointer ppvObject) {
            return vtbl.QueryInterface(this, riid, ppvObject);
        }
        public final int AddRef() {
            return vtbl.AddRef(this);
        }
        public final int Release() {
            return vtbl.Release(this);
        }
        public final int RegisterObjectBound(IUnknown punk) {
            return vtbl.RegisterObjectBound(this, punk);
        }
        public final int RevokeObjectBound(IUnknown punk) {
            return vtbl.RevokeObjectBound(this, punk);
        }
        public final int ReleaseBoundObjects() {
            return vtbl.ReleaseBoundObjects(this);
        }
        public final int SetBindOptions(BIND_OPTS pbindopts) {
            return vtbl.SetBindOptions(this, pbindopts);
        }
        public final int GetBindOptions(BIND_OPTS pbindopts) {
            return vtbl.GetBindOptions(this, pbindopts);
        }
        public final int GetRunningObjectTable(PointerPointer pprot) {
            return vtbl.GetRunningObjectTable(this, pprot);
        }
        public final int RegisterObjectParam(Int16Pointer pszKey, IUnknown punk) {
            return vtbl.RegisterObjectParam(this, pszKey, punk);
        }
        public final int GetObjectParam(Int16Pointer pszKey, PointerPointer ppunk) {
            return vtbl.GetObjectParam(this, pszKey, ppunk);
        }
        public final int EnumObjectParam(PointerPointer ppenum) {
            return vtbl.EnumObjectParam(this, ppenum);
        }
        public final int RevokeObjectParam(Int16Pointer pszKey) {
            return vtbl.RevokeObjectParam(this, pszKey);
        }
        @Override
        public int size() {
            return sizeof;
        }
    }

    public final IBindCtx createIBindCtx(long addr) {
        return new IBindCtx(addr);
    }


    public static class IShellFolderVtbl extends CommonStructWrapper {

        public static final int sizeof = NativeBridge.is64 ? 104 : 52;

        IShellFolderVtbl(boolean direct) {
            super(sizeof, direct);
        }
        IShellFolderVtbl(VoidPointer base) {
            super(base);
        }
        IShellFolderVtbl(long addr) {
            super(addr);
        }
        public final void set_QueryInterface(long val) {
            byteBase.setAddress(0, val);
        }
        public final long get_QueryInterface() {
            return byteBase.getAddress(0);
        }
        public final int QueryInterface(Win32.IShellFolder This, Win32.GUID riid, PointerPointer ppvObject) {
            long tmp_0 = This == null ? 0 : This.longLockPointer();
            long tmp_1 = riid == null ? 0 : riid.longLockPointer();
            long tmp_2 = ppvObject == null ? 0 : ppvObject.longLockPointer();
            int tmp_ret = instance.proxycall1(get_QueryInterface(), tmp_0, tmp_1, tmp_2);
            if (This != null) {
                This.unlock();
            }
            if (riid != null) {
                riid.unlock();
            }
            if (ppvObject != null) {
                ppvObject.unlock();
            }
            return tmp_ret;
        }
        public final void set_AddRef(long val) {
            byteBase.setAddress(NativeBridge.is64 ? 8 : 4, val);
        }
        public final long get_AddRef() {
            return byteBase.getAddress(NativeBridge.is64 ? 8 : 4);
        }
        public final int AddRef(Win32.IShellFolder This) {
            long tmp_0 = This == null ? 0 : This.longLockPointer();
            int tmp_ret = instance.proxycall2(get_AddRef(), tmp_0);
            if (This != null) {
                This.unlock();
            }
            return tmp_ret;
        }
        public final void set_Release(long val) {
            byteBase.setAddress(NativeBridge.is64 ? 16 : 8, val);
        }
        public final long get_Release() {
            return byteBase.getAddress(NativeBridge.is64 ? 16 : 8);
        }
        public final int Release(Win32.IShellFolder This) {
            long tmp_0 = This == null ? 0 : This.longLockPointer();
            int tmp_ret = instance.proxycall3(get_Release(), tmp_0);
            if (This != null) {
                This.unlock();
            }
            return tmp_ret;
        }
        public final void set_ParseDisplayName(long val) {
            byteBase.setAddress(NativeBridge.is64 ? 24 : 12, val);
        }
        public final long get_ParseDisplayName() {
            return byteBase.getAddress(NativeBridge.is64 ? 24 : 12);
        }
        public final int ParseDisplayName(Win32.IShellFolder This, long hwnd, Win32.IBindCtx pbc, Int16Pointer pszDisplayName, Int32Pointer pchEaten, PointerPointer ppidl, Int32Pointer pdwAttributes) {
            long tmp_0 = This == null ? 0 : This.longLockPointer();
            long tmp_1 = pbc == null ? 0 : pbc.longLockPointer();
            long tmp_2 = pszDisplayName == null ? 0 : pszDisplayName.longLockPointer();
            long tmp_3 = pchEaten == null ? 0 : pchEaten.longLockPointer();
            long tmp_4 = ppidl == null ? 0 : ppidl.longLockPointer();
            long tmp_5 = pdwAttributes == null ? 0 : pdwAttributes.longLockPointer();
            int tmp_ret = instance.proxycall4(get_ParseDisplayName(), tmp_0, hwnd, tmp_1, tmp_2, tmp_3, tmp_4, tmp_5);
            if (This != null) {
                This.unlock();
            }
            if (pbc != null) {
                pbc.unlock();
            }
            if (pszDisplayName != null) {
                pszDisplayName.unlock();
            }
            if (pchEaten != null) {
                pchEaten.unlock();
            }
            if (ppidl != null) {
                ppidl.unlock();
            }
            if (pdwAttributes != null) {
                pdwAttributes.unlock();
            }
            return tmp_ret;
        }
        public final void set_EnumObjects(long val) {
            byteBase.setAddress(NativeBridge.is64 ? 32 : 16, val);
        }
        public final long get_EnumObjects() {
            return byteBase.getAddress(NativeBridge.is64 ? 32 : 16);
        }
        public final int EnumObjects(Win32.IShellFolder This, long hwnd, int grfFlags, PointerPointer ppenumIDList) {
            long tmp_0 = This == null ? 0 : This.longLockPointer();
            long tmp_1 = ppenumIDList == null ? 0 : ppenumIDList.longLockPointer();
            int tmp_ret = instance.proxycall5(get_EnumObjects(), tmp_0, hwnd, grfFlags, tmp_1);
            if (This != null) {
                This.unlock();
            }
            if (ppenumIDList != null) {
                ppenumIDList.unlock();
            }
            return tmp_ret;
        }
        public final void set_BindToObject(long val) {
            byteBase.setAddress(NativeBridge.is64 ? 40 : 20, val);
        }
        public final long get_BindToObject() {
            return byteBase.getAddress(NativeBridge.is64 ? 40 : 20);
        }
        public final int BindToObject(Win32.IShellFolder This, Win32.ITEMIDLIST pidl, Win32.IBindCtx pbc, Win32.GUID riid, PointerPointer ppv) {
            long tmp_0 = This == null ? 0 : This.longLockPointer();
            long tmp_1 = pidl == null ? 0 : pidl.longLockPointer();
            long tmp_2 = pbc == null ? 0 : pbc.longLockPointer();
            long tmp_3 = riid == null ? 0 : riid.longLockPointer();
            long tmp_4 = ppv == null ? 0 : ppv.longLockPointer();
            int tmp_ret = instance.proxycall6(get_BindToObject(), tmp_0, tmp_1, tmp_2, tmp_3, tmp_4);
            if (This != null) {
                This.unlock();
            }
            if (pidl != null) {
                pidl.unlock();
            }
            if (pbc != null) {
                pbc.unlock();
            }
            if (riid != null) {
                riid.unlock();
            }
            if (ppv != null) {
                ppv.unlock();
            }
            return tmp_ret;
        }
        public final void set_BindToStorage(long val) {
            byteBase.setAddress(NativeBridge.is64 ? 48 : 24, val);
        }
        public final long get_BindToStorage() {
            return byteBase.getAddress(NativeBridge.is64 ? 48 : 24);
        }
        public final int BindToStorage(Win32.IShellFolder This, Win32.ITEMIDLIST pidl, Win32.IBindCtx pbc, Win32.GUID riid, PointerPointer ppv) {
            long tmp_0 = This == null ? 0 : This.longLockPointer();
            long tmp_1 = pidl == null ? 0 : pidl.longLockPointer();
            long tmp_2 = pbc == null ? 0 : pbc.longLockPointer();
            long tmp_3 = riid == null ? 0 : riid.longLockPointer();
            long tmp_4 = ppv == null ? 0 : ppv.longLockPointer();
            int tmp_ret = instance.proxycall7(get_BindToStorage(), tmp_0, tmp_1, tmp_2, tmp_3, tmp_4);
            if (This != null) {
                This.unlock();
            }
            if (pidl != null) {
                pidl.unlock();
            }
            if (pbc != null) {
                pbc.unlock();
            }
            if (riid != null) {
                riid.unlock();
            }
            if (ppv != null) {
                ppv.unlock();
            }
            return tmp_ret;
        }
        public final void set_CompareIDs(long val) {
            byteBase.setAddress(NativeBridge.is64 ? 56 : 28, val);
        }
        public final long get_CompareIDs() {
            return byteBase.getAddress(NativeBridge.is64 ? 56 : 28);
        }
        public final int CompareIDs(Win32.IShellFolder This, long lParam, Win32.ITEMIDLIST pidl1, Win32.ITEMIDLIST pidl2) {
            long tmp_0 = This == null ? 0 : This.longLockPointer();
            long tmp_1 = pidl1 == null ? 0 : pidl1.longLockPointer();
            long tmp_2 = pidl2 == null ? 0 : pidl2.longLockPointer();
            int tmp_ret = instance.proxycall8(get_CompareIDs(), tmp_0, lParam, tmp_1, tmp_2);
            if (This != null) {
                This.unlock();
            }
            if (pidl1 != null) {
                pidl1.unlock();
            }
            if (pidl2 != null) {
                pidl2.unlock();
            }
            return tmp_ret;
        }
        public final void set_CreateViewObject(long val) {
            byteBase.setAddress(NativeBridge.is64 ? 64 : 32, val);
        }
        public final long get_CreateViewObject() {
            return byteBase.getAddress(NativeBridge.is64 ? 64 : 32);
        }
        public final int CreateViewObject(Win32.IShellFolder This, long hwndOwner, Win32.GUID riid, PointerPointer ppv) {
            long tmp_0 = This == null ? 0 : This.longLockPointer();
            long tmp_1 = riid == null ? 0 : riid.longLockPointer();
            long tmp_2 = ppv == null ? 0 : ppv.longLockPointer();
            int tmp_ret = instance.proxycall9(get_CreateViewObject(), tmp_0, hwndOwner, tmp_1, tmp_2);
            if (This != null) {
                This.unlock();
            }
            if (riid != null) {
                riid.unlock();
            }
            if (ppv != null) {
                ppv.unlock();
            }
            return tmp_ret;
        }
        public final void set_GetAttributesOf(long val) {
            byteBase.setAddress(NativeBridge.is64 ? 72 : 36, val);
        }
        public final long get_GetAttributesOf() {
            return byteBase.getAddress(NativeBridge.is64 ? 72 : 36);
        }
        public final int GetAttributesOf(Win32.IShellFolder This, int cidl, PointerPointer apidl, Int32Pointer rgfInOut) {
            long tmp_0 = This == null ? 0 : This.longLockPointer();
            long tmp_1 = apidl == null ? 0 : apidl.longLockPointer();
            long tmp_2 = rgfInOut == null ? 0 : rgfInOut.longLockPointer();
            int tmp_ret = instance.proxycall10(get_GetAttributesOf(), tmp_0, cidl, tmp_1, tmp_2);
            if (This != null) {
                This.unlock();
            }
            if (apidl != null) {
                apidl.unlock();
            }
            if (rgfInOut != null) {
                rgfInOut.unlock();
            }
            return tmp_ret;
        }
        public final void set_GetUIObjectOf(long val) {
            byteBase.setAddress(NativeBridge.is64 ? 80 : 40, val);
        }
        public final long get_GetUIObjectOf() {
            return byteBase.getAddress(NativeBridge.is64 ? 80 : 40);
        }
        public final int GetUIObjectOf(Win32.IShellFolder This, long hwndOwner, int cidl, PointerPointer apidl, Win32.GUID riid, Int32Pointer rgfReserved, PointerPointer ppv) {
            long tmp_0 = This == null ? 0 : This.longLockPointer();
            long tmp_1 = apidl == null ? 0 : apidl.longLockPointer();
            long tmp_2 = riid == null ? 0 : riid.longLockPointer();
            long tmp_3 = rgfReserved == null ? 0 : rgfReserved.longLockPointer();
            long tmp_4 = ppv == null ? 0 : ppv.longLockPointer();
            int tmp_ret = instance.proxycall11(get_GetUIObjectOf(), tmp_0, hwndOwner, cidl, tmp_1, tmp_2, tmp_3, tmp_4);
            if (This != null) {
                This.unlock();
            }
            if (apidl != null) {
                apidl.unlock();
            }
            if (riid != null) {
                riid.unlock();
            }
            if (rgfReserved != null) {
                rgfReserved.unlock();
            }
            if (ppv != null) {
                ppv.unlock();
            }
            return tmp_ret;
        }
        public final void set_GetDisplayNameOf(long val) {
            byteBase.setAddress(NativeBridge.is64 ? 88 : 44, val);
        }
        public final long get_GetDisplayNameOf() {
            return byteBase.getAddress(NativeBridge.is64 ? 88 : 44);
        }
        public final int GetDisplayNameOf(Win32.IShellFolder This, Win32.ITEMIDLIST pidl, int uFlags, Win32.STRRET pName) {
            long tmp_0 = This == null ? 0 : This.longLockPointer();
            long tmp_1 = pidl == null ? 0 : pidl.longLockPointer();
            long tmp_2 = pName == null ? 0 : pName.longLockPointer();
            int tmp_ret = instance.proxycall12(get_GetDisplayNameOf(), tmp_0, tmp_1, uFlags, tmp_2);
            if (This != null) {
                This.unlock();
            }
            if (pidl != null) {
                pidl.unlock();
            }
            if (pName != null) {
                pName.unlock();
            }
            return tmp_ret;
        }
        public final void set_SetNameOf(long val) {
            byteBase.setAddress(NativeBridge.is64 ? 96 : 48, val);
        }
        public final long get_SetNameOf() {
            return byteBase.getAddress(NativeBridge.is64 ? 96 : 48);
        }
        public final int SetNameOf(Win32.IShellFolder This, long hwnd, Win32.ITEMIDLIST pidl, String pszName, int uFlags, PointerPointer ppidlOut) {
            long tmp_0 = This == null ? 0 : This.longLockPointer();
            long tmp_1 = pidl == null ? 0 : pidl.longLockPointer();
            Int16Pointer _pszName = null == pszName? null :  nb.createInt16Pointer(pszName, false);
            long tmp_2 = _pszName == null ? 0 : _pszName.longLockPointer();
            long tmp_3 = ppidlOut == null ? 0 : ppidlOut.longLockPointer();
            int tmp_ret = instance.proxycall13(get_SetNameOf(), tmp_0, hwnd, tmp_1, tmp_2, uFlags, tmp_3);
            if (This != null) {
                This.unlock();
            }
            if (pidl != null) {
                pidl.unlock();
            }
            if (_pszName != null) {
                _pszName.unlock();
                _pszName.free();
            }
            if (ppidlOut != null) {
                ppidlOut.unlock();
            }
            return tmp_ret;
        }
        public final int SetNameOf(Win32.IShellFolder This, long hwnd, Win32.ITEMIDLIST pidl, Int16Pointer pszName, int uFlags, PointerPointer ppidlOut) {
            long tmp_0 = This == null ? 0 : This.longLockPointer();
            long tmp_1 = pidl == null ? 0 : pidl.longLockPointer();
            long tmp_2 = pszName == null ? 0 : pszName.longLockPointer();
            long tmp_3 = ppidlOut == null ? 0 : ppidlOut.longLockPointer();
            int tmp_ret = instance.proxycall13(get_SetNameOf(), tmp_0, hwnd, tmp_1, tmp_2, uFlags, tmp_3);
            if (This != null) {
                This.unlock();
            }
            if (pidl != null) {
                pidl.unlock();
            }
            if (pszName != null) {
                pszName.unlock();
            }
            if (ppidlOut != null) {
                ppidlOut.unlock();
            }
            return tmp_ret;
        }
        @Override
        public int size() {
            return sizeof;
        }
    }

    public final IShellFolderVtbl createIShellFolderVtbl(boolean direct) {
        return new IShellFolderVtbl(direct);
    }
    public final IShellFolderVtbl createIShellFolderVtbl(VoidPointer base) {
        return new IShellFolderVtbl(base);
    }
    public final IShellFolderVtbl createIShellFolderVtbl(long addr) {
        return new IShellFolderVtbl(addr);
    }


    public static class IUnknown extends CommonStructWrapper {

        public static final int sizeof = NativeBridge.is64 ? 8 : 4;

        IUnknownVtbl vtbl;
        IUnknown(long addr) {
            super(addr);
            vtbl = get_lpVtbl();
        }
        public final IUnknownVtbl get_lpVtbl() {
            return instance.createIUnknownVtbl(byteBase.getAddress(0));
        }
        public final int QueryInterface(Win32.GUID riid, PointerPointer ppvObject) {
            return vtbl.QueryInterface(this, riid, ppvObject);
        }
        public final int AddRef() {
            return vtbl.AddRef(this);
        }
        public final int Release() {
            return vtbl.Release(this);
        }
        @Override
        public int size() {
            return sizeof;
        }
    }

    public final IUnknown createIUnknown(long addr) {
        return new IUnknown(addr);
    }


    public static class BIND_OPTS extends CommonStructWrapper {

        public static final int sizeof = 16;

        BIND_OPTS(boolean direct) {
            super(sizeof, direct);
        }
        BIND_OPTS(VoidPointer base) {
            super(base);
        }
        BIND_OPTS(long addr) {
            super(addr);
        }
        public final void set_cbStruct(int val) {
            byteBase.setInt32(0, val);
        }
        public final int get_cbStruct() {
            return byteBase.getInt32(0);
        }
        public final void set_grfFlags(int val) {
            byteBase.setInt32(4, val);
        }
        public final int get_grfFlags() {
            return byteBase.getInt32(4);
        }
        public final void set_grfMode(int val) {
            byteBase.setInt32(8, val);
        }
        public final int get_grfMode() {
            return byteBase.getInt32(8);
        }
        public final void set_dwTickCountDeadline(int val) {
            byteBase.setInt32(12, val);
        }
        public final int get_dwTickCountDeadline() {
            return byteBase.getInt32(12);
        }
        @Override
        public int size() {
            return sizeof;
        }
    }

    public final BIND_OPTS createBIND_OPTS(boolean direct) {
        return new BIND_OPTS(direct);
    }
    public final BIND_OPTS createBIND_OPTS(VoidPointer base) {
        return new BIND_OPTS(base);
    }
    public final BIND_OPTS createBIND_OPTS(long addr) {
        return new BIND_OPTS(addr);
    }


    public static class IBindCtxVtbl extends CommonStructWrapper {

        public static final int sizeof = NativeBridge.is64 ? 104 : 52;

        IBindCtxVtbl(boolean direct) {
            super(sizeof, direct);
        }
        IBindCtxVtbl(VoidPointer base) {
            super(base);
        }
        IBindCtxVtbl(long addr) {
            super(addr);
        }
        public final void set_QueryInterface(long val) {
            byteBase.setAddress(0, val);
        }
        public final long get_QueryInterface() {
            return byteBase.getAddress(0);
        }
        public final int QueryInterface(Win32.IBindCtx This, Win32.GUID riid, PointerPointer ppvObject) {
            long tmp_0 = This == null ? 0 : This.longLockPointer();
            long tmp_1 = riid == null ? 0 : riid.longLockPointer();
            long tmp_2 = ppvObject == null ? 0 : ppvObject.longLockPointer();
            int tmp_ret = instance.proxycall14(get_QueryInterface(), tmp_0, tmp_1, tmp_2);
            if (This != null) {
                This.unlock();
            }
            if (riid != null) {
                riid.unlock();
            }
            if (ppvObject != null) {
                ppvObject.unlock();
            }
            return tmp_ret;
        }
        public final void set_AddRef(long val) {
            byteBase.setAddress(NativeBridge.is64 ? 8 : 4, val);
        }
        public final long get_AddRef() {
            return byteBase.getAddress(NativeBridge.is64 ? 8 : 4);
        }
        public final int AddRef(Win32.IBindCtx This) {
            long tmp_0 = This == null ? 0 : This.longLockPointer();
            int tmp_ret = instance.proxycall15(get_AddRef(), tmp_0);
            if (This != null) {
                This.unlock();
            }
            return tmp_ret;
        }
        public final void set_Release(long val) {
            byteBase.setAddress(NativeBridge.is64 ? 16 : 8, val);
        }
        public final long get_Release() {
            return byteBase.getAddress(NativeBridge.is64 ? 16 : 8);
        }
        public final int Release(Win32.IBindCtx This) {
            long tmp_0 = This == null ? 0 : This.longLockPointer();
            int tmp_ret = instance.proxycall16(get_Release(), tmp_0);
            if (This != null) {
                This.unlock();
            }
            return tmp_ret;
        }
        public final void set_RegisterObjectBound(long val) {
            byteBase.setAddress(NativeBridge.is64 ? 24 : 12, val);
        }
        public final long get_RegisterObjectBound() {
            return byteBase.getAddress(NativeBridge.is64 ? 24 : 12);
        }
        public final int RegisterObjectBound(Win32.IBindCtx This, Win32.IUnknown punk) {
            long tmp_0 = This == null ? 0 : This.longLockPointer();
            long tmp_1 = punk == null ? 0 : punk.longLockPointer();
            int tmp_ret = instance.proxycall17(get_RegisterObjectBound(), tmp_0, tmp_1);
            if (This != null) {
                This.unlock();
            }
            if (punk != null) {
                punk.unlock();
            }
            return tmp_ret;
        }
        public final void set_RevokeObjectBound(long val) {
            byteBase.setAddress(NativeBridge.is64 ? 32 : 16, val);
        }
        public final long get_RevokeObjectBound() {
            return byteBase.getAddress(NativeBridge.is64 ? 32 : 16);
        }
        public final int RevokeObjectBound(Win32.IBindCtx This, Win32.IUnknown punk) {
            long tmp_0 = This == null ? 0 : This.longLockPointer();
            long tmp_1 = punk == null ? 0 : punk.longLockPointer();
            int tmp_ret = instance.proxycall18(get_RevokeObjectBound(), tmp_0, tmp_1);
            if (This != null) {
                This.unlock();
            }
            if (punk != null) {
                punk.unlock();
            }
            return tmp_ret;
        }
        public final void set_ReleaseBoundObjects(long val) {
            byteBase.setAddress(NativeBridge.is64 ? 40 : 20, val);
        }
        public final long get_ReleaseBoundObjects() {
            return byteBase.getAddress(NativeBridge.is64 ? 40 : 20);
        }
        public final int ReleaseBoundObjects(Win32.IBindCtx This) {
            long tmp_0 = This == null ? 0 : This.longLockPointer();
            int tmp_ret = instance.proxycall19(get_ReleaseBoundObjects(), tmp_0);
            if (This != null) {
                This.unlock();
            }
            return tmp_ret;
        }
        public final void set_SetBindOptions(long val) {
            byteBase.setAddress(NativeBridge.is64 ? 48 : 24, val);
        }
        public final long get_SetBindOptions() {
            return byteBase.getAddress(NativeBridge.is64 ? 48 : 24);
        }
        public final int SetBindOptions(Win32.IBindCtx This, Win32.BIND_OPTS pbindopts) {
            long tmp_0 = This == null ? 0 : This.longLockPointer();
            long tmp_1 = pbindopts == null ? 0 : pbindopts.longLockPointer();
            int tmp_ret = instance.proxycall20(get_SetBindOptions(), tmp_0, tmp_1);
            if (This != null) {
                This.unlock();
            }
            if (pbindopts != null) {
                pbindopts.unlock();
            }
            return tmp_ret;
        }
        public final void set_GetBindOptions(long val) {
            byteBase.setAddress(NativeBridge.is64 ? 56 : 28, val);
        }
        public final long get_GetBindOptions() {
            return byteBase.getAddress(NativeBridge.is64 ? 56 : 28);
        }
        public final int GetBindOptions(Win32.IBindCtx This, Win32.BIND_OPTS pbindopts) {
            long tmp_0 = This == null ? 0 : This.longLockPointer();
            long tmp_1 = pbindopts == null ? 0 : pbindopts.longLockPointer();
            int tmp_ret = instance.proxycall21(get_GetBindOptions(), tmp_0, tmp_1);
            if (This != null) {
                This.unlock();
            }
            if (pbindopts != null) {
                pbindopts.unlock();
            }
            return tmp_ret;
        }
        public final void set_GetRunningObjectTable(long val) {
            byteBase.setAddress(NativeBridge.is64 ? 64 : 32, val);
        }
        public final long get_GetRunningObjectTable() {
            return byteBase.getAddress(NativeBridge.is64 ? 64 : 32);
        }
        public final int GetRunningObjectTable(Win32.IBindCtx This, PointerPointer pprot) {
            long tmp_0 = This == null ? 0 : This.longLockPointer();
            long tmp_1 = pprot == null ? 0 : pprot.longLockPointer();
            int tmp_ret = instance.proxycall22(get_GetRunningObjectTable(), tmp_0, tmp_1);
            if (This != null) {
                This.unlock();
            }
            if (pprot != null) {
                pprot.unlock();
            }
            return tmp_ret;
        }
        public final void set_RegisterObjectParam(long val) {
            byteBase.setAddress(NativeBridge.is64 ? 72 : 36, val);
        }
        public final long get_RegisterObjectParam() {
            return byteBase.getAddress(NativeBridge.is64 ? 72 : 36);
        }
        public final int RegisterObjectParam(Win32.IBindCtx This, Int16Pointer pszKey, Win32.IUnknown punk) {
            long tmp_0 = This == null ? 0 : This.longLockPointer();
            long tmp_1 = pszKey == null ? 0 : pszKey.longLockPointer();
            long tmp_2 = punk == null ? 0 : punk.longLockPointer();
            int tmp_ret = instance.proxycall23(get_RegisterObjectParam(), tmp_0, tmp_1, tmp_2);
            if (This != null) {
                This.unlock();
            }
            if (pszKey != null) {
                pszKey.unlock();
            }
            if (punk != null) {
                punk.unlock();
            }
            return tmp_ret;
        }
        public final void set_GetObjectParam(long val) {
            byteBase.setAddress(NativeBridge.is64 ? 80 : 40, val);
        }
        public final long get_GetObjectParam() {
            return byteBase.getAddress(NativeBridge.is64 ? 80 : 40);
        }
        public final int GetObjectParam(Win32.IBindCtx This, Int16Pointer pszKey, PointerPointer ppunk) {
            long tmp_0 = This == null ? 0 : This.longLockPointer();
            long tmp_1 = pszKey == null ? 0 : pszKey.longLockPointer();
            long tmp_2 = ppunk == null ? 0 : ppunk.longLockPointer();
            int tmp_ret = instance.proxycall24(get_GetObjectParam(), tmp_0, tmp_1, tmp_2);
            if (This != null) {
                This.unlock();
            }
            if (pszKey != null) {
                pszKey.unlock();
            }
            if (ppunk != null) {
                ppunk.unlock();
            }
            return tmp_ret;
        }
        public final void set_EnumObjectParam(long val) {
            byteBase.setAddress(NativeBridge.is64 ? 88 : 44, val);
        }
        public final long get_EnumObjectParam() {
            return byteBase.getAddress(NativeBridge.is64 ? 88 : 44);
        }
        public final int EnumObjectParam(Win32.IBindCtx This, PointerPointer ppenum) {
            long tmp_0 = This == null ? 0 : This.longLockPointer();
            long tmp_1 = ppenum == null ? 0 : ppenum.longLockPointer();
            int tmp_ret = instance.proxycall25(get_EnumObjectParam(), tmp_0, tmp_1);
            if (This != null) {
                This.unlock();
            }
            if (ppenum != null) {
                ppenum.unlock();
            }
            return tmp_ret;
        }
        public final void set_RevokeObjectParam(long val) {
            byteBase.setAddress(NativeBridge.is64 ? 96 : 48, val);
        }
        public final long get_RevokeObjectParam() {
            return byteBase.getAddress(NativeBridge.is64 ? 96 : 48);
        }
        public final int RevokeObjectParam(Win32.IBindCtx This, Int16Pointer pszKey) {
            long tmp_0 = This == null ? 0 : This.longLockPointer();
            long tmp_1 = pszKey == null ? 0 : pszKey.longLockPointer();
            int tmp_ret = instance.proxycall26(get_RevokeObjectParam(), tmp_0, tmp_1);
            if (This != null) {
                This.unlock();
            }
            if (pszKey != null) {
                pszKey.unlock();
            }
            return tmp_ret;
        }
        @Override
        public int size() {
            return sizeof;
        }
    }

    public final IBindCtxVtbl createIBindCtxVtbl(boolean direct) {
        return new IBindCtxVtbl(direct);
    }
    public final IBindCtxVtbl createIBindCtxVtbl(VoidPointer base) {
        return new IBindCtxVtbl(base);
    }
    public final IBindCtxVtbl createIBindCtxVtbl(long addr) {
        return new IBindCtxVtbl(addr);
    }


    public static class IUnknownVtbl extends CommonStructWrapper {

        public static final int sizeof = NativeBridge.is64 ? 24 : 12;

        IUnknownVtbl(boolean direct) {
            super(sizeof, direct);
        }
        IUnknownVtbl(VoidPointer base) {
            super(base);
        }
        IUnknownVtbl(long addr) {
            super(addr);
        }
        public final void set_QueryInterface(long val) {
            byteBase.setAddress(0, val);
        }
        public final long get_QueryInterface() {
            return byteBase.getAddress(0);
        }
        public final int QueryInterface(Win32.IUnknown This, Win32.GUID riid, PointerPointer ppvObject) {
            long tmp_0 = This == null ? 0 : This.longLockPointer();
            long tmp_1 = riid == null ? 0 : riid.longLockPointer();
            long tmp_2 = ppvObject == null ? 0 : ppvObject.longLockPointer();
            int tmp_ret = instance.proxycall27(get_QueryInterface(), tmp_0, tmp_1, tmp_2);
            if (This != null) {
                This.unlock();
            }
            if (riid != null) {
                riid.unlock();
            }
            if (ppvObject != null) {
                ppvObject.unlock();
            }
            return tmp_ret;
        }
        public final void set_AddRef(long val) {
            byteBase.setAddress(NativeBridge.is64 ? 8 : 4, val);
        }
        public final long get_AddRef() {
            return byteBase.getAddress(NativeBridge.is64 ? 8 : 4);
        }
        public final int AddRef(Win32.IUnknown This) {
            long tmp_0 = This == null ? 0 : This.longLockPointer();
            int tmp_ret = instance.proxycall28(get_AddRef(), tmp_0);
            if (This != null) {
                This.unlock();
            }
            return tmp_ret;
        }
        public final void set_Release(long val) {
            byteBase.setAddress(NativeBridge.is64 ? 16 : 8, val);
        }
        public final long get_Release() {
            return byteBase.getAddress(NativeBridge.is64 ? 16 : 8);
        }
        public final int Release(Win32.IUnknown This) {
            long tmp_0 = This == null ? 0 : This.longLockPointer();
            int tmp_ret = instance.proxycall29(get_Release(), tmp_0);
            if (This != null) {
                This.unlock();
            }
            return tmp_ret;
        }
        @Override
        public int size() {
            return sizeof;
        }
    }

    public final IUnknownVtbl createIUnknownVtbl(boolean direct) {
        return new IUnknownVtbl(direct);
    }
    public final IUnknownVtbl createIUnknownVtbl(VoidPointer base) {
        return new IUnknownVtbl(base);
    }
    public final IUnknownVtbl createIUnknownVtbl(long addr) {
        return new IUnknownVtbl(addr);
    }

    final native int proxycall1(long fnptr, long This, long riid, long ppvObject);
    final native int proxycall2(long fnptr, long This);
    final native int proxycall3(long fnptr, long This);
    final native int proxycall4(long fnptr, long This, long hwnd, long pbc, long pszDisplayName, long pchEaten, long ppidl, long pdwAttributes);
    final native int proxycall5(long fnptr, long This, long hwnd, int grfFlags, long ppenumIDList);
    final native int proxycall6(long fnptr, long This, long pidl, long pbc, long riid, long ppv);
    final native int proxycall7(long fnptr, long This, long pidl, long pbc, long riid, long ppv);
    final native int proxycall8(long fnptr, long This, long lParam, long pidl1, long pidl2);
    final native int proxycall9(long fnptr, long This, long hwndOwner, long riid, long ppv);
    final native int proxycall10(long fnptr, long This, int cidl, long apidl, long rgfInOut);
    final native int proxycall11(long fnptr, long This, long hwndOwner, int cidl, long apidl, long riid, long rgfReserved, long ppv);
    final native int proxycall12(long fnptr, long This, long pidl, int uFlags, long pName);
    final native int proxycall13(long fnptr, long This, long hwnd, long pidl, long pszName, int uFlags, long ppidlOut);
    final native int proxycall14(long fnptr, long This, long riid, long ppvObject);
    final native int proxycall15(long fnptr, long This);
    final native int proxycall16(long fnptr, long This);
    final native int proxycall17(long fnptr, long This, long punk);
    final native int proxycall18(long fnptr, long This, long punk);
    final native int proxycall19(long fnptr, long This);
    final native int proxycall20(long fnptr, long This, long pbindopts);
    final native int proxycall21(long fnptr, long This, long pbindopts);
    final native int proxycall22(long fnptr, long This, long pprot);
    final native int proxycall23(long fnptr, long This, long pszKey, long punk);
    final native int proxycall24(long fnptr, long This, long pszKey, long ppunk);
    final native int proxycall25(long fnptr, long This, long ppenum);
    final native int proxycall26(long fnptr, long This, long pszKey);
    final native int proxycall27(long fnptr, long This, long riid, long ppvObject);
    final native int proxycall28(long fnptr, long This);
    final native int proxycall29(long fnptr, long This);
    public final int ScreenToClient(long hWnd, Win32.POINT lpPoint) {
        long tmp_0 = lpPoint == null ? 0 : lpPoint.longLockPointer();
        int tmp_ret = ScreenToClient(hWnd, tmp_0);
        if (lpPoint != null) {
            lpPoint.unlock();
        }
        return tmp_ret;
    }
    public final native int ScreenToClient(long hWnd, long lpPoint);

    public final native long GetParent(long hWnd);

    public final native long SetFocus(long hWnd);

    public final int DescribePixelFormat(long param_0, int param_1, int param_2, Win32.PIXELFORMATDESCRIPTOR param_3) {
        long tmp_0 = param_3 == null ? 0 : param_3.longLockPointer();
        int tmp_ret = DescribePixelFormat(param_0, param_1, param_2, tmp_0);
        if (param_3 != null) {
            param_3.unlock();
        }
        return tmp_ret;
    }
    public final native int DescribePixelFormat(long param_0, int param_1, int param_2, long param_3);

    public final native int SetTextColor(long param_0, int param_1);

    public final native long MonitorFromWindow(long hwnd, int dwFlags);

    public final int GetDIBits(long param_0, long param_1, int param_2, int param_3, VoidPointer param_4, BITMAPINFO param_5, int param_6) {
        long tmp_0 = param_4 == null ? 0 : param_4.longLockPointer();
        long tmp_1 = param_5 == null ? 0 : param_5.longLockPointer();
        int tmp_ret = GetDIBits(param_0, param_1, param_2, param_3, tmp_0, tmp_1, param_6);
        if (param_4 != null) {
            param_4.unlock();
        }
        if (param_5 != null) {
            param_5.unlock();
        }
        return tmp_ret;
    }
    public final native int GetDIBits(long param_0, long param_1, int param_2, int param_3, long param_4, long param_5, int param_6);


    public static class BITMAPINFO extends CommonStructWrapper {

        public static final int sizeof = 44;

        BITMAPINFO(boolean direct) {
            super(sizeof, direct);
        }
        BITMAPINFO(VoidPointer base) {
            super(base);
        }
        BITMAPINFO(long addr) {
            super(addr);
        }
        public final BITMAPINFOHEADER get_bmiHeader() {
            return instance.createBITMAPINFOHEADER(getElementPointer(0));
        }
        public final Int8Pointer get_bmiColors() {
            return nb.createInt8Pointer(getElementPointer(40));
        }
        @Override
        public int size() {
            return sizeof;
        }
    }

    public final BITMAPINFO createBITMAPINFO(boolean direct) {
        return new BITMAPINFO(direct);
    }
    public final BITMAPINFO createBITMAPINFO(VoidPointer base) {
        return new BITMAPINFO(base);
    }
    public final BITMAPINFO createBITMAPINFO(long addr) {
        return new BITMAPINFO(addr);
    }


    public static class BITMAPINFOHEADER extends CommonStructWrapper {

        public static final int sizeof = 40;

        BITMAPINFOHEADER(boolean direct) {
            super(sizeof, direct);
        }
        BITMAPINFOHEADER(VoidPointer base) {
            super(base);
        }
        BITMAPINFOHEADER(long addr) {
            super(addr);
        }
        public final void set_biSize(int val) {
            byteBase.setInt32(0, val);
        }
        public final int get_biSize() {
            return byteBase.getInt32(0);
        }
        public final void set_biWidth(int val) {
            byteBase.setInt32(4, val);
        }
        public final int get_biWidth() {
            return byteBase.getInt32(4);
        }
        public final void set_biHeight(int val) {
            byteBase.setInt32(8, val);
        }
        public final int get_biHeight() {
            return byteBase.getInt32(8);
        }
        public final void set_biPlanes(short val) {
            byteBase.setInt16(12, val);
        }
        public final short get_biPlanes() {
            return byteBase.getInt16(12);
        }
        public final void set_biBitCount(short val) {
            byteBase.setInt16(14, val);
        }
        public final short get_biBitCount() {
            return byteBase.getInt16(14);
        }
        public final void set_biCompression(int val) {
            byteBase.setInt32(16, val);
        }
        public final int get_biCompression() {
            return byteBase.getInt32(16);
        }
        public final void set_biSizeImage(int val) {
            byteBase.setInt32(20, val);
        }
        public final int get_biSizeImage() {
            return byteBase.getInt32(20);
        }
        public final void set_biXPelsPerMeter(int val) {
            byteBase.setInt32(24, val);
        }
        public final int get_biXPelsPerMeter() {
            return byteBase.getInt32(24);
        }
        public final void set_biYPelsPerMeter(int val) {
            byteBase.setInt32(28, val);
        }
        public final int get_biYPelsPerMeter() {
            return byteBase.getInt32(28);
        }
        public final void set_biClrUsed(int val) {
            byteBase.setInt32(32, val);
        }
        public final int get_biClrUsed() {
            return byteBase.getInt32(32);
        }
        public final void set_biClrImportant(int val) {
            byteBase.setInt32(36, val);
        }
        public final int get_biClrImportant() {
            return byteBase.getInt32(36);
        }
        @Override
        public int size() {
            return sizeof;
        }
    }

    public final BITMAPINFOHEADER createBITMAPINFOHEADER(boolean direct) {
        return new BITMAPINFOHEADER(direct);
    }
    public final BITMAPINFOHEADER createBITMAPINFOHEADER(VoidPointer base) {
        return new BITMAPINFOHEADER(base);
    }
    public final BITMAPINFOHEADER createBITMAPINFOHEADER(long addr) {
        return new BITMAPINFOHEADER(addr);
    }

    public final int FormatMessageW(int dwFlags, VoidPointer lpSource, int dwMessageId, int dwLanguageId, Int16Pointer lpBuffer, int nSize, PointerPointer Arguments) {
        long tmp_0 = lpSource == null ? 0 : lpSource.longLockPointer();
        long tmp_1 = lpBuffer == null ? 0 : lpBuffer.longLockPointer();
        long tmp_2 = Arguments == null ? 0 : Arguments.longLockPointer();
        int tmp_ret = FormatMessageW(dwFlags, tmp_0, dwMessageId, dwLanguageId, tmp_1, nSize, tmp_2);
        if (lpSource != null) {
            lpSource.unlock();
        }
        if (lpBuffer != null) {
            lpBuffer.unlock();
        }
        if (Arguments != null) {
            Arguments.unlock();
        }
        return tmp_ret;
    }
    public final native int FormatMessageW(int dwFlags, long lpSource, int dwMessageId, int dwLanguageId, long lpBuffer, int nSize, long Arguments);

    public final int SHGetDesktopFolder(PointerPointer ppshf) {
        long tmp_0 = ppshf == null ? 0 : ppshf.longLockPointer();
        int tmp_ret = SHGetDesktopFolder(tmp_0);
        if (ppshf != null) {
            ppshf.unlock();
        }
        return tmp_ret;
    }
    public final native int SHGetDesktopFolder(long ppshf);

    public final int ImmSetCompositionWindow(long param_0, COMPOSITIONFORM param_1) {
        long tmp_0 = param_1 == null ? 0 : param_1.longLockPointer();
        int tmp_ret = ImmSetCompositionWindow(param_0, tmp_0);
        if (param_1 != null) {
            param_1.unlock();
        }
        return tmp_ret;
    }
    public final native int ImmSetCompositionWindow(long param_0, long param_1);


    public static class COMPOSITIONFORM extends CommonStructWrapper {

        public static final int sizeof = 28;

        COMPOSITIONFORM(boolean direct) {
            super(sizeof, direct);
        }
        COMPOSITIONFORM(VoidPointer base) {
            super(base);
        }
        COMPOSITIONFORM(long addr) {
            super(addr);
        }
        public final void set_dwStyle(int val) {
            byteBase.setInt32(0, val);
        }
        public final int get_dwStyle() {
            return byteBase.getInt32(0);
        }
        public final Win32.POINT get_ptCurrentPos() {
            return Win32.instance.createPOINT(getElementPointer(4));
        }
        public final Win32.RECT get_rcArea() {
            return Win32.instance.createRECT(getElementPointer(12));
        }
        @Override
        public int size() {
            return sizeof;
        }
    }

    public final COMPOSITIONFORM createCOMPOSITIONFORM(boolean direct) {
        return new COMPOSITIONFORM(direct);
    }
    public final COMPOSITIONFORM createCOMPOSITIONFORM(VoidPointer base) {
        return new COMPOSITIONFORM(base);
    }
    public final COMPOSITIONFORM createCOMPOSITIONFORM(long addr) {
        return new COMPOSITIONFORM(addr);
    }

    public final int SendInput(int cInputs, INPUT pInputs, int cbSize) {
        long tmp_0 = pInputs == null ? 0 : pInputs.longLockPointer();
        int tmp_ret = SendInput(cInputs, tmp_0, cbSize);
        if (pInputs != null) {
            pInputs.unlock();
        }
        return tmp_ret;
    }
    public final native int SendInput(int cInputs, long pInputs, int cbSize);


    public static class INPUT extends CommonStructWrapper {

        public static final int sizeof = NativeBridge.is64 ? 40 : 28;

        INPUT(boolean direct) {
            super(sizeof, direct);
        }
        INPUT(VoidPointer base) {
            super(base);
        }
        INPUT(long addr) {
            super(addr);
        }
        public final void set_type(int val) {
            byteBase.setInt32(0, val);
        }
        public final int get_type() {
            return byteBase.getInt32(0);
        }
        public final MOUSEINPUT get_mi() {
            return instance.createMOUSEINPUT(getElementPointer(NativeBridge.is64 ? 8 : 4));
        }
        public final KEYBDINPUT get_ki() {
            return instance.createKEYBDINPUT(getElementPointer(NativeBridge.is64 ? 8 : 4));
        }
        public final HARDWAREINPUT get_hi() {
            return instance.createHARDWAREINPUT(getElementPointer(NativeBridge.is64 ? 8 : 4));
        }
        @Override
        public int size() {
            return sizeof;
        }
    }

    public final INPUT createINPUT(boolean direct) {
        return new INPUT(direct);
    }
    public final INPUT createINPUT(VoidPointer base) {
        return new INPUT(base);
    }
    public final INPUT createINPUT(long addr) {
        return new INPUT(addr);
    }


    public static class MOUSEINPUT extends CommonStructWrapper {

        public static final int sizeof = NativeBridge.is64 ? 32 : 24;

        MOUSEINPUT(boolean direct) {
            super(sizeof, direct);
        }
        MOUSEINPUT(VoidPointer base) {
            super(base);
        }
        MOUSEINPUT(long addr) {
            super(addr);
        }
        public final void set_dx(int val) {
            byteBase.setInt32(0, val);
        }
        public final int get_dx() {
            return byteBase.getInt32(0);
        }
        public final void set_dy(int val) {
            byteBase.setInt32(4, val);
        }
        public final int get_dy() {
            return byteBase.getInt32(4);
        }
        public final void set_mouseData(int val) {
            byteBase.setInt32(8, val);
        }
        public final int get_mouseData() {
            return byteBase.getInt32(8);
        }
        public final void set_dwFlags(int val) {
            byteBase.setInt32(12, val);
        }
        public final int get_dwFlags() {
            return byteBase.getInt32(12);
        }
        public final void set_time(int val) {
            byteBase.setInt32(16, val);
        }
        public final int get_time() {
            return byteBase.getInt32(16);
        }
        public final void set_dwExtraInfo(long val) {
            byteBase.setCLong(NativeBridge.is64 ? 24 : 20, val);
        }
        public final long get_dwExtraInfo() {
            return byteBase.getCLong(NativeBridge.is64 ? 24 : 20);
        }
        @Override
        public int size() {
            return sizeof;
        }
    }

    public final MOUSEINPUT createMOUSEINPUT(boolean direct) {
        return new MOUSEINPUT(direct);
    }
    public final MOUSEINPUT createMOUSEINPUT(VoidPointer base) {
        return new MOUSEINPUT(base);
    }
    public final MOUSEINPUT createMOUSEINPUT(long addr) {
        return new MOUSEINPUT(addr);
    }


    public static class HARDWAREINPUT extends CommonStructWrapper {

        public static final int sizeof = 8;

        HARDWAREINPUT(boolean direct) {
            super(sizeof, direct);
        }
        HARDWAREINPUT(VoidPointer base) {
            super(base);
        }
        HARDWAREINPUT(long addr) {
            super(addr);
        }
        public final void set_uMsg(int val) {
            byteBase.setInt32(0, val);
        }
        public final int get_uMsg() {
            return byteBase.getInt32(0);
        }
        public final void set_wParamL(short val) {
            byteBase.setInt16(4, val);
        }
        public final short get_wParamL() {
            return byteBase.getInt16(4);
        }
        public final void set_wParamH(short val) {
            byteBase.setInt16(6, val);
        }
        public final short get_wParamH() {
            return byteBase.getInt16(6);
        }
        @Override
        public int size() {
            return sizeof;
        }
    }

    public final HARDWAREINPUT createHARDWAREINPUT(boolean direct) {
        return new HARDWAREINPUT(direct);
    }
    public final HARDWAREINPUT createHARDWAREINPUT(VoidPointer base) {
        return new HARDWAREINPUT(base);
    }
    public final HARDWAREINPUT createHARDWAREINPUT(long addr) {
        return new HARDWAREINPUT(addr);
    }


    public static class KEYBDINPUT extends CommonStructWrapper {

        public static final int sizeof = NativeBridge.is64 ? 24 : 16;

        KEYBDINPUT(boolean direct) {
            super(sizeof, direct);
        }
        KEYBDINPUT(VoidPointer base) {
            super(base);
        }
        KEYBDINPUT(long addr) {
            super(addr);
        }
        public final void set_wVk(short val) {
            byteBase.setInt16(0, val);
        }
        public final short get_wVk() {
            return byteBase.getInt16(0);
        }
        public final void set_wScan(short val) {
            byteBase.setInt16(2, val);
        }
        public final short get_wScan() {
            return byteBase.getInt16(2);
        }
        public final void set_dwFlags(int val) {
            byteBase.setInt32(4, val);
        }
        public final int get_dwFlags() {
            return byteBase.getInt32(4);
        }
        public final void set_time(int val) {
            byteBase.setInt32(8, val);
        }
        public final int get_time() {
            return byteBase.getInt32(8);
        }
        public final void set_dwExtraInfo(long val) {
            byteBase.setCLong(NativeBridge.is64 ? 16 : 12, val);
        }
        public final long get_dwExtraInfo() {
            return byteBase.getCLong(NativeBridge.is64 ? 16 : 12);
        }
        @Override
        public int size() {
            return sizeof;
        }
    }

    public final KEYBDINPUT createKEYBDINPUT(boolean direct) {
        return new KEYBDINPUT(direct);
    }
    public final KEYBDINPUT createKEYBDINPUT(VoidPointer base) {
        return new KEYBDINPUT(base);
    }
    public final KEYBDINPUT createKEYBDINPUT(long addr) {
        return new KEYBDINPUT(addr);
    }

    public final int DeleteObject(VoidPointer param_0) {
        long tmp_0 = param_0 == null ? 0 : param_0.longLockPointer();
        int tmp_ret = DeleteObject(tmp_0);
        if (param_0 != null) {
            param_0.unlock();
        }
        return tmp_ret;
    }
    public final native int DeleteObject(long param_0);

    public final native int ImmIsIME(long param_0);

    public final short RegisterClassExW(WNDCLASSEXW param_0) {
        long tmp_0 = param_0 == null ? 0 : param_0.longLockPointer();
        short tmp_ret = RegisterClassExW(tmp_0);
        if (param_0 != null) {
            param_0.unlock();
        }
        return tmp_ret;
    }
    public final native short RegisterClassExW(long param_0);


    public static class WNDCLASSEXW extends CommonStructWrapper {

        public static final int sizeof = NativeBridge.is64 ? 80 : 48;

        WNDCLASSEXW(boolean direct) {
            super(sizeof, direct);
        }
        WNDCLASSEXW(VoidPointer base) {
            super(base);
        }
        WNDCLASSEXW(long addr) {
            super(addr);
        }
        public final void set_cbSize(int val) {
            byteBase.setInt32(0, val);
        }
        public final int get_cbSize() {
            return byteBase.getInt32(0);
        }
        public final void set_style(int val) {
            byteBase.setInt32(4, val);
        }
        public final int get_style() {
            return byteBase.getInt32(4);
        }
        public final void set_lpfnWndProc(long val) {
            byteBase.setAddress(8, val);
        }
        public final long get_lpfnWndProc() {
            return byteBase.getAddress(8);
        }
        public final long WNDPROC(long param_0, int param_1, long param_2, long param_3) {
            long tmp_ret = instance.proxycall30(get_lpfnWndProc(), param_0, param_1, param_2, param_3);
            return tmp_ret;
        }
        public final void set_cbClsExtra(int val) {
            byteBase.setInt32(NativeBridge.is64 ? 16 : 12, val);
        }
        public final int get_cbClsExtra() {
            return byteBase.getInt32(NativeBridge.is64 ? 16 : 12);
        }
        public final void set_cbWndExtra(int val) {
            byteBase.setInt32(NativeBridge.is64 ? 20 : 16, val);
        }
        public final int get_cbWndExtra() {
            return byteBase.getInt32(NativeBridge.is64 ? 20 : 16);
        }
        public final void set_hInstance(long val) {
            byteBase.setAddress(NativeBridge.is64 ? 24 : 20, val);
        }
        public final long get_hInstance() {
            return byteBase.getAddress(NativeBridge.is64 ? 24 : 20);
        }
        public final void set_hIcon(long val) {
            byteBase.setAddress(NativeBridge.is64 ? 32 : 24, val);
        }
        public final long get_hIcon() {
            return byteBase.getAddress(NativeBridge.is64 ? 32 : 24);
        }
        public final void set_hCursor(long val) {
            byteBase.setAddress(NativeBridge.is64 ? 40 : 28, val);
        }
        public final long get_hCursor() {
            return byteBase.getAddress(NativeBridge.is64 ? 40 : 28);
        }
        public final void set_hbrBackground(long val) {
            byteBase.setAddress(NativeBridge.is64 ? 48 : 32, val);
        }
        public final long get_hbrBackground() {
            return byteBase.getAddress(NativeBridge.is64 ? 48 : 32);
        }
        public final void set_lpszMenuName(Int16Pointer val) {
            byteBase.setPointer(NativeBridge.is64 ? 56 : 36, val);
        }
        public final Int16Pointer get_lpszMenuName() {
            return nb.createInt16Pointer(byteBase.getAddress(NativeBridge.is64 ? 56 : 36));
        }
        public final void set_lpszClassName(Int16Pointer val) {
            byteBase.setPointer(NativeBridge.is64 ? 64 : 40, val);
        }
        public final Int16Pointer get_lpszClassName() {
            return nb.createInt16Pointer(byteBase.getAddress(NativeBridge.is64 ? 64 : 40));
        }
        public final void set_hIconSm(long val) {
            byteBase.setAddress(NativeBridge.is64 ? 72 : 44, val);
        }
        public final long get_hIconSm() {
            return byteBase.getAddress(NativeBridge.is64 ? 72 : 44);
        }
        @Override
        public int size() {
            return sizeof;
        }
    }

    public final WNDCLASSEXW createWNDCLASSEXW(boolean direct) {
        return new WNDCLASSEXW(direct);
    }
    public final WNDCLASSEXW createWNDCLASSEXW(VoidPointer base) {
        return new WNDCLASSEXW(base);
    }
    public final WNDCLASSEXW createWNDCLASSEXW(long addr) {
        return new WNDCLASSEXW(addr);
    }

    final native long proxycall30(long fnptr, long param_0, int param_1, long param_2, long param_3);
    public final native long GetWindowDC(long hWnd);

    public final int RegisterClipboardFormatW(String lpszFormat) {
        Int16Pointer _lpszFormat = null == lpszFormat? null :  nb.createInt16Pointer(lpszFormat, false);
        long tmp_0 = _lpszFormat == null ? 0 : _lpszFormat.longLockPointer();
        int tmp_ret = RegisterClipboardFormatW(tmp_0);
        if (_lpszFormat != null) {
            _lpszFormat.unlock();
            _lpszFormat.free();
        }
        return tmp_ret;
    }
    public final int RegisterClipboardFormatW(Int16Pointer lpszFormat) {
        long tmp_0 = lpszFormat == null ? 0 : lpszFormat.longLockPointer();
        int tmp_ret = RegisterClipboardFormatW(tmp_0);
        if (lpszFormat != null) {
            lpszFormat.unlock();
        }
        return tmp_ret;
    }
    public final native int RegisterClipboardFormatW(long lpszFormat);

    public final native int EnumClipboardFormats(int format);

    public final native long GetFocus();

    public final native long CreateRectRgn(int param_0, int param_1, int param_2, int param_3);

    public final native int DestroyCursor(long hCursor);

    public final int GetCurrentThemeName(Int16Pointer pszThemeFileName, int cchMaxNameChars, Int16Pointer pszColorBuff, int cchMaxColorChars, Int16Pointer pszSizeBuff, int cchMaxSizeChars) {
        long tmp_0 = pszThemeFileName == null ? 0 : pszThemeFileName.longLockPointer();
        long tmp_1 = pszColorBuff == null ? 0 : pszColorBuff.longLockPointer();
        long tmp_2 = pszSizeBuff == null ? 0 : pszSizeBuff.longLockPointer();
        int tmp_ret = GetCurrentThemeName(tmp_0, cchMaxNameChars, tmp_1, cchMaxColorChars, tmp_2, cchMaxSizeChars);
        if (pszThemeFileName != null) {
            pszThemeFileName.unlock();
        }
        if (pszColorBuff != null) {
            pszColorBuff.unlock();
        }
        if (pszSizeBuff != null) {
            pszSizeBuff.unlock();
        }
        return tmp_ret;
    }
    public final native int GetCurrentThemeName(long pszThemeFileName, int cchMaxNameChars, long pszColorBuff, int cchMaxColorChars, long pszSizeBuff, int cchMaxSizeChars);

    public final native long GetClipboardData(int uFormat);

    public final int MoveToEx(long param_0, int param_1, int param_2, Win32.POINT param_3) {
        long tmp_0 = param_3 == null ? 0 : param_3.longLockPointer();
        int tmp_ret = MoveToEx(param_0, param_1, param_2, tmp_0);
        if (param_3 != null) {
            param_3.unlock();
        }
        return tmp_ret;
    }
    public final native int MoveToEx(long param_0, int param_1, int param_2, long param_3);

    public final native int ImmNotifyIME(long param_0, int dwAction, int dwIndex, int dwValue);

    public final long WindowFromPoint(Win32.POINT Point) {
        long tmp_0 = Point == null ? 0 : Point.longLockPointer();
        long tmp_ret = WindowFromPoint(tmp_0);
        if (Point != null) {
            Point.unlock();
        }
        return tmp_ret;
    }
    public final native long WindowFromPoint(long Point);

    public final native long SetCapture(long hWnd);

    public final native int DestroyCaret();

    public final int SetWindowTextW(long hWnd, String lpString) {
        Int16Pointer _lpString = null == lpString? null :  nb.createInt16Pointer(lpString, false);
        long tmp_0 = _lpString == null ? 0 : _lpString.longLockPointer();
        int tmp_ret = SetWindowTextW(hWnd, tmp_0);
        if (_lpString != null) {
            _lpString.unlock();
            _lpString.free();
        }
        return tmp_ret;
    }
    public final int SetWindowTextW(long hWnd, Int16Pointer lpString) {
        long tmp_0 = lpString == null ? 0 : lpString.longLockPointer();
        int tmp_ret = SetWindowTextW(hWnd, tmp_0);
        if (lpString != null) {
            lpString.unlock();
        }
        return tmp_ret;
    }
    public final native int SetWindowTextW(long hWnd, long lpString);

    public final int DrawFocusRect(long hDC, Win32.RECT lprc) {
        long tmp_0 = lprc == null ? 0 : lprc.longLockPointer();
        int tmp_ret = DrawFocusRect(hDC, tmp_0);
        if (lprc != null) {
            lprc.unlock();
        }
        return tmp_ret;
    }
    public final native int DrawFocusRect(long hDC, long lprc);

    public final long CreateBrushIndirect(LOGBRUSH param_0) {
        long tmp_0 = param_0 == null ? 0 : param_0.longLockPointer();
        long tmp_ret = CreateBrushIndirect(tmp_0);
        if (param_0 != null) {
            param_0.unlock();
        }
        return tmp_ret;
    }
    public final native long CreateBrushIndirect(long param_0);


    public static class LOGBRUSH extends CommonStructWrapper {

        public static final int sizeof = NativeBridge.is64 ? 16 : 12;

        LOGBRUSH(boolean direct) {
            super(sizeof, direct);
        }
        LOGBRUSH(VoidPointer base) {
            super(base);
        }
        LOGBRUSH(long addr) {
            super(addr);
        }
        public final void set_lbStyle(int val) {
            byteBase.setInt32(0, val);
        }
        public final int get_lbStyle() {
            return byteBase.getInt32(0);
        }
        public final void set_lbColor(int val) {
            byteBase.setInt32(4, val);
        }
        public final int get_lbColor() {
            return byteBase.getInt32(4);
        }
        public final void set_lbHatch(long val) {
            byteBase.setCLong(8, val);
        }
        public final long get_lbHatch() {
            return byteBase.getCLong(8);
        }
        @Override
        public int size() {
            return sizeof;
        }
    }

    public final LOGBRUSH createLOGBRUSH(boolean direct) {
        return new LOGBRUSH(direct);
    }
    public final LOGBRUSH createLOGBRUSH(VoidPointer base) {
        return new LOGBRUSH(base);
    }
    public final LOGBRUSH createLOGBRUSH(long addr) {
        return new LOGBRUSH(addr);
    }

    public final native int MapVirtualKeyW(int uCode, int uMapType);

    public final int GetRgnBox(long param_0, Win32.RECT param_1) {
        long tmp_0 = param_1 == null ? 0 : param_1.longLockPointer();
        int tmp_ret = GetRgnBox(param_0, tmp_0);
        if (param_1 != null) {
            param_1.unlock();
        }
        return tmp_ret;
    }
    public final native int GetRgnBox(long param_0, long param_1);

    public final native long GetActiveWindow();

    public final int WideCharToMultiByte(int CodePage, int dwFlags, String lpWideCharStr, int cchWideChar, Int8Pointer lpMultiByteStr, int cbMultiByte, String lpDefaultChar, Int32Pointer lpUsedDefaultChar) {
        Int16Pointer _lpWideCharStr = null == lpWideCharStr? null :  nb.createInt16Pointer(lpWideCharStr, false);
        long tmp_0 = _lpWideCharStr == null ? 0 : _lpWideCharStr.longLockPointer();
        long tmp_1 = lpMultiByteStr == null ? 0 : lpMultiByteStr.longLockPointer();
        Int8Pointer _lpDefaultChar = null == lpDefaultChar? null :  nb.createInt8Pointer(lpDefaultChar, false);
        long tmp_2 = _lpDefaultChar == null ? 0 : _lpDefaultChar.longLockPointer();
        long tmp_3 = lpUsedDefaultChar == null ? 0 : lpUsedDefaultChar.longLockPointer();
        int tmp_ret = WideCharToMultiByte(CodePage, dwFlags, tmp_0, cchWideChar, tmp_1, cbMultiByte, tmp_2, tmp_3);
        if (_lpWideCharStr != null) {
            _lpWideCharStr.unlock();
            _lpWideCharStr.free();
        }
        if (lpMultiByteStr != null) {
            lpMultiByteStr.unlock();
        }
        if (_lpDefaultChar != null) {
            _lpDefaultChar.unlock();
            _lpDefaultChar.free();
        }
        if (lpUsedDefaultChar != null) {
            lpUsedDefaultChar.unlock();
        }
        return tmp_ret;
    }
    public final int WideCharToMultiByte(int CodePage, int dwFlags, Int16Pointer lpWideCharStr, int cchWideChar, Int8Pointer lpMultiByteStr, int cbMultiByte, Int8Pointer lpDefaultChar, Int32Pointer lpUsedDefaultChar) {
        long tmp_0 = lpWideCharStr == null ? 0 : lpWideCharStr.longLockPointer();
        long tmp_1 = lpMultiByteStr == null ? 0 : lpMultiByteStr.longLockPointer();
        long tmp_2 = lpDefaultChar == null ? 0 : lpDefaultChar.longLockPointer();
        long tmp_3 = lpUsedDefaultChar == null ? 0 : lpUsedDefaultChar.longLockPointer();
        int tmp_ret = WideCharToMultiByte(CodePage, dwFlags, tmp_0, cchWideChar, tmp_1, cbMultiByte, tmp_2, tmp_3);
        if (lpWideCharStr != null) {
            lpWideCharStr.unlock();
        }
        if (lpMultiByteStr != null) {
            lpMultiByteStr.unlock();
        }
        if (lpDefaultChar != null) {
            lpDefaultChar.unlock();
        }
        if (lpUsedDefaultChar != null) {
            lpUsedDefaultChar.unlock();
        }
        return tmp_ret;
    }
    public final native int WideCharToMultiByte(int CodePage, int dwFlags, long lpWideCharStr, int cchWideChar, long lpMultiByteStr, int cbMultiByte, long lpDefaultChar, long lpUsedDefaultChar);

    public final native int IsThemeActive();

    public final int GetThemeSysColor(VoidPointer hTheme, int iColorId) {
        long tmp_0 = hTheme == null ? 0 : hTheme.longLockPointer();
        int tmp_ret = GetThemeSysColor(tmp_0, iColorId);
        if (hTheme != null) {
            hTheme.unlock();
        }
        return tmp_ret;
    }
    public final native int GetThemeSysColor(long hTheme, int iColorId);

    public final long GlobalSize(VoidPointer hMem) {
        long tmp_0 = hMem == null ? 0 : hMem.longLockPointer();
        long tmp_ret = GlobalSize(tmp_0);
        if (hMem != null) {
            hMem.unlock();
        }
        return tmp_ret;
    }
    public final native long GlobalSize(long hMem);

    public final native int FillRgn(long param_0, long param_1, long param_2);

    public final int DrawFrameControl(long param_0, Win32.RECT param_1, int param_2, int param_3) {
        long tmp_0 = param_1 == null ? 0 : param_1.longLockPointer();
        int tmp_ret = DrawFrameControl(param_0, tmp_0, param_2, param_3);
        if (param_1 != null) {
            param_1.unlock();
        }
        return tmp_ret;
    }
    public final native int DrawFrameControl(long param_0, long param_1, int param_2, int param_3);

    public final native int EmptyClipboard();

    public final native int DestroyWindow(long hWnd);

    public final int CloseThemeData(VoidPointer hTheme) {
        long tmp_0 = hTheme == null ? 0 : hTheme.longLockPointer();
        int tmp_ret = CloseThemeData(tmp_0);
        if (hTheme != null) {
            hTheme.unlock();
        }
        return tmp_ret;
    }
    public final native int CloseThemeData(long hTheme);

    public final int TextOutW(long param_0, int param_1, int param_2, String param_3, int param_4) {
        Int16Pointer _param_3 = null == param_3? null :  nb.createInt16Pointer(param_3, false);
        long tmp_0 = _param_3 == null ? 0 : _param_3.longLockPointer();
        int tmp_ret = TextOutW(param_0, param_1, param_2, tmp_0, param_4);
        if (_param_3 != null) {
            _param_3.unlock();
            _param_3.free();
        }
        return tmp_ret;
    }
    public final int TextOutW(long param_0, int param_1, int param_2, Int16Pointer param_3, int param_4) {
        long tmp_0 = param_3 == null ? 0 : param_3.longLockPointer();
        int tmp_ret = TextOutW(param_0, param_1, param_2, tmp_0, param_4);
        if (param_3 != null) {
            param_3.unlock();
        }
        return tmp_ret;
    }
    public final native int TextOutW(long param_0, int param_1, int param_2, long param_3, int param_4);

    public final int GetCaretPos(Win32.POINT lpPoint) {
        long tmp_0 = lpPoint == null ? 0 : lpPoint.longLockPointer();
        int tmp_ret = GetCaretPos(tmp_0);
        if (lpPoint != null) {
            lpPoint.unlock();
        }
        return tmp_ret;
    }
    public final native int GetCaretPos(long lpPoint);

    public final int GetThemeSysSize(VoidPointer hTheme, int iSizeId) {
        long tmp_0 = hTheme == null ? 0 : hTheme.longLockPointer();
        int tmp_ret = GetThemeSysSize(tmp_0, iSizeId);
        if (hTheme != null) {
            hTheme.unlock();
        }
        return tmp_ret;
    }
    public final native int GetThemeSysSize(long hTheme, int iSizeId);

    public final native int SelectClipRgn(long param_0, long param_1);

    public final int SHGetFolderLocation(long hwnd, int csidl, VoidPointer hToken, int dwFlags, PointerPointer ppidl) {
        long tmp_0 = hToken == null ? 0 : hToken.longLockPointer();
        long tmp_1 = ppidl == null ? 0 : ppidl.longLockPointer();
        int tmp_ret = SHGetFolderLocation(hwnd, csidl, tmp_0, dwFlags, tmp_1);
        if (hToken != null) {
            hToken.unlock();
        }
        if (ppidl != null) {
            ppidl.unlock();
        }
        return tmp_ret;
    }
    public final native int SHGetFolderLocation(long hwnd, int csidl, long hToken, int dwFlags, long ppidl);

    public final native long ImmCreateContext();

    public final int CLSIDFromString(Int16Pointer lpsz, Win32.GUID pclsid) {
        long tmp_0 = lpsz == null ? 0 : lpsz.longLockPointer();
        long tmp_1 = pclsid == null ? 0 : pclsid.longLockPointer();
        int tmp_ret = CLSIDFromString(tmp_0, tmp_1);
        if (lpsz != null) {
            lpsz.unlock();
        }
        if (pclsid != null) {
            pclsid.unlock();
        }
        return tmp_ret;
    }
    public final native int CLSIDFromString(long lpsz, long pclsid);

    public final int StrRetToBufW(Win32.STRRET pstr, Win32.ITEMIDLIST pidl, Int16Pointer pszBuf, int cchBuf) {
        long tmp_0 = pstr == null ? 0 : pstr.longLockPointer();
        long tmp_1 = pidl == null ? 0 : pidl.longLockPointer();
        long tmp_2 = pszBuf == null ? 0 : pszBuf.longLockPointer();
        int tmp_ret = StrRetToBufW(tmp_0, tmp_1, tmp_2, cchBuf);
        if (pstr != null) {
            pstr.unlock();
        }
        if (pidl != null) {
            pidl.unlock();
        }
        if (pszBuf != null) {
            pszBuf.unlock();
        }
        return tmp_ret;
    }
    public final native int StrRetToBufW(long pstr, long pidl, long pszBuf, int cchBuf);

    public final native int SetPolyFillMode(long param_0, int param_1);

    public final Int8Pointer LocalFree(VoidPointer hMem) {
        long tmp_0 = hMem == null ? 0 : hMem.longLockPointer();
        long tmp_ret = LocalFree(tmp_0);
        if (hMem != null) {
            hMem.unlock();
        }
        return nb.createInt8Pointer(tmp_ret);
    }
    public final native long LocalFree(long hMem);

    public final native long CreateCompatibleDC(long param_0);

    public final native long CreateCompatibleBitmap(long param_0, int param_1, int param_2);

    public final native long DefWindowProcW(long hWnd, int Msg, long wParam, long lParam);

    public final native int CloseClipboard();

    public final native long SetActiveWindow(long hWnd);

    public final native int GetDeviceCaps(long param_0, int param_1);

    public final native long CreatePatternBrush(long param_0);

    public final native void mouse_event(int dwFlags, int dx, int dy, int dwData, long dwExtraInfo);

    public final int EnumDisplayDevicesW(String lpDevice, int iDevNum, DISPLAY_DEVICEW lpDisplayDevice, int dwFlags) {
        Int16Pointer _lpDevice = null == lpDevice? null :  nb.createInt16Pointer(lpDevice, false);
        long tmp_0 = _lpDevice == null ? 0 : _lpDevice.longLockPointer();
        long tmp_1 = lpDisplayDevice == null ? 0 : lpDisplayDevice.longLockPointer();
        int tmp_ret = EnumDisplayDevicesW(tmp_0, iDevNum, tmp_1, dwFlags);
        if (_lpDevice != null) {
            _lpDevice.unlock();
            _lpDevice.free();
        }
        if (lpDisplayDevice != null) {
            lpDisplayDevice.unlock();
        }
        return tmp_ret;
    }
    public final int EnumDisplayDevicesW(Int16Pointer lpDevice, int iDevNum, DISPLAY_DEVICEW lpDisplayDevice, int dwFlags) {
        long tmp_0 = lpDevice == null ? 0 : lpDevice.longLockPointer();
        long tmp_1 = lpDisplayDevice == null ? 0 : lpDisplayDevice.longLockPointer();
        int tmp_ret = EnumDisplayDevicesW(tmp_0, iDevNum, tmp_1, dwFlags);
        if (lpDevice != null) {
            lpDevice.unlock();
        }
        if (lpDisplayDevice != null) {
            lpDisplayDevice.unlock();
        }
        return tmp_ret;
    }
    public final native int EnumDisplayDevicesW(long lpDevice, int iDevNum, long lpDisplayDevice, int dwFlags);


    public static class DISPLAY_DEVICEW extends CommonStructWrapper {

        public static final int sizeof = 840;

        DISPLAY_DEVICEW(boolean direct) {
            super(sizeof, direct);
        }
        DISPLAY_DEVICEW(VoidPointer base) {
            super(base);
        }
        DISPLAY_DEVICEW(long addr) {
            super(addr);
        }
        public final void set_cb(int val) {
            byteBase.setInt32(0, val);
        }
        public final int get_cb() {
            return byteBase.getInt32(0);
        }
        public final Int16Pointer get_DeviceName() {
            return nb.createInt16Pointer(getElementPointer(4));
        }
        public final Int16Pointer get_DeviceString() {
            return nb.createInt16Pointer(getElementPointer(68));
        }
        public final void set_StateFlags(int val) {
            byteBase.setInt32(324, val);
        }
        public final int get_StateFlags() {
            return byteBase.getInt32(324);
        }
        public final Int16Pointer get_DeviceID() {
            return nb.createInt16Pointer(getElementPointer(328));
        }
        public final Int16Pointer get_DeviceKey() {
            return nb.createInt16Pointer(getElementPointer(584));
        }
        @Override
        public int size() {
            return sizeof;
        }
    }

    public final DISPLAY_DEVICEW createDISPLAY_DEVICEW(boolean direct) {
        return new DISPLAY_DEVICEW(direct);
    }
    public final DISPLAY_DEVICEW createDISPLAY_DEVICEW(VoidPointer base) {
        return new DISPLAY_DEVICEW(base);
    }
    public final DISPLAY_DEVICEW createDISPLAY_DEVICEW(long addr) {
        return new DISPLAY_DEVICEW(addr);
    }

    public final native int SetWindowLongW(long hWnd, int nIndex, int dwNewLong);

    public final int Polygon(long param_0, Win32.POINT param_1, int param_2) {
        long tmp_0 = param_1 == null ? 0 : param_1.longLockPointer();
        int tmp_ret = Polygon(param_0, tmp_0, param_2);
        if (param_1 != null) {
            param_1.unlock();
        }
        return tmp_ret;
    }
    public final native int Polygon(long param_0, long param_1, int param_2);

    public final native int GetUpdateRgn(long hWnd, long hRgn, int bErase);

    public final native int Pie(long param_0, int param_1, int param_2, int param_3, int param_4, int param_5, int param_6, int param_7, int param_8);

    public final native long GetClipboardOwner();

    public final native int ShowWindow(long hWnd, int nCmdShow);

    public final int MapWindowPoints(long hWndFrom, long hWndTo, Win32.POINT lpPoints, int cPoints) {
        long tmp_0 = lpPoints == null ? 0 : lpPoints.longLockPointer();
        int tmp_ret = MapWindowPoints(hWndFrom, hWndTo, tmp_0, cPoints);
        if (lpPoints != null) {
            lpPoints.unlock();
        }
        return tmp_ret;
    }
    public final native int MapWindowPoints(long hWndFrom, long hWndTo, long lpPoints, int cPoints);

    public final int ChoosePixelFormat(long param_0, Win32.PIXELFORMATDESCRIPTOR param_1) {
        long tmp_0 = param_1 == null ? 0 : param_1.longLockPointer();
        int tmp_ret = ChoosePixelFormat(param_0, tmp_0);
        if (param_1 != null) {
            param_1.unlock();
        }
        return tmp_ret;
    }
    public final native int ChoosePixelFormat(long param_0, long param_1);

    public final int PolyPolyline(long param_0, Win32.POINT param_1, Int32Pointer param_2, int param_3) {
        long tmp_0 = param_1 == null ? 0 : param_1.longLockPointer();
        long tmp_1 = param_2 == null ? 0 : param_2.longLockPointer();
        int tmp_ret = PolyPolyline(param_0, tmp_0, tmp_1, param_3);
        if (param_1 != null) {
            param_1.unlock();
        }
        if (param_2 != null) {
            param_2.unlock();
        }
        return tmp_ret;
    }
    public final native int PolyPolyline(long param_0, long param_1, long param_2, int param_3);

    public final native int GetRandomRgn(long param_0, long param_1, int param_2);

    public final long ExtCreatePen(int param_0, int param_1, Win32.LOGBRUSH param_2, int param_3, Int32Pointer param_4) {
        long tmp_0 = param_2 == null ? 0 : param_2.longLockPointer();
        long tmp_1 = param_4 == null ? 0 : param_4.longLockPointer();
        long tmp_ret = ExtCreatePen(param_0, param_1, tmp_0, param_3, tmp_1);
        if (param_2 != null) {
            param_2.unlock();
        }
        if (param_4 != null) {
            param_4.unlock();
        }
        return tmp_ret;
    }
    public final native long ExtCreatePen(int param_0, int param_1, long param_2, int param_3, long param_4);

    public final int ChangeDisplaySettingsExW(String lpszDeviceName, Win32.DEVMODEW lpDevMode, long hwnd, int dwflags, VoidPointer lParam) {
        Int16Pointer _lpszDeviceName = null == lpszDeviceName? null :  nb.createInt16Pointer(lpszDeviceName, false);
        long tmp_0 = _lpszDeviceName == null ? 0 : _lpszDeviceName.longLockPointer();
        long tmp_1 = lpDevMode == null ? 0 : lpDevMode.longLockPointer();
        long tmp_2 = lParam == null ? 0 : lParam.longLockPointer();
        int tmp_ret = ChangeDisplaySettingsExW(tmp_0, tmp_1, hwnd, dwflags, tmp_2);
        if (_lpszDeviceName != null) {
            _lpszDeviceName.unlock();
            _lpszDeviceName.free();
        }
        if (lpDevMode != null) {
            lpDevMode.unlock();
        }
        if (lParam != null) {
            lParam.unlock();
        }
        return tmp_ret;
    }
    public final int ChangeDisplaySettingsExW(Int16Pointer lpszDeviceName, Win32.DEVMODEW lpDevMode, long hwnd, int dwflags, VoidPointer lParam) {
        long tmp_0 = lpszDeviceName == null ? 0 : lpszDeviceName.longLockPointer();
        long tmp_1 = lpDevMode == null ? 0 : lpDevMode.longLockPointer();
        long tmp_2 = lParam == null ? 0 : lParam.longLockPointer();
        int tmp_ret = ChangeDisplaySettingsExW(tmp_0, tmp_1, hwnd, dwflags, tmp_2);
        if (lpszDeviceName != null) {
            lpszDeviceName.unlock();
        }
        if (lpDevMode != null) {
            lpDevMode.unlock();
        }
        if (lParam != null) {
            lParam.unlock();
        }
        return tmp_ret;
    }
    public final native int ChangeDisplaySettingsExW(long lpszDeviceName, long lpDevMode, long hwnd, int dwflags, long lParam);

    public final int GetRegionData(long param_0, int param_1, Win32.RGNDATA param_2) {
        long tmp_0 = param_2 == null ? 0 : param_2.longLockPointer();
        int tmp_ret = GetRegionData(param_0, param_1, tmp_0);
        if (param_2 != null) {
            param_2.unlock();
        }
        return tmp_ret;
    }
    public final native int GetRegionData(long param_0, int param_1, long param_2);

    public final int InflateRect(Win32.RECT lprc, int dx, int dy) {
        long tmp_0 = lprc == null ? 0 : lprc.longLockPointer();
        int tmp_ret = InflateRect(tmp_0, dx, dy);
        if (lprc != null) {
            lprc.unlock();
        }
        return tmp_ret;
    }
    public final native int InflateRect(long lprc, int dx, int dy);

    public final native int SetBkColor(long param_0, int param_1);

    public final native long GetAncestor(long hwnd, int gaFlags);

    public final int GetThemeSysBool(VoidPointer hTheme, int iBoolId) {
        long tmp_0 = hTheme == null ? 0 : hTheme.longLockPointer();
        int tmp_ret = GetThemeSysBool(tmp_0, iBoolId);
        if (hTheme != null) {
            hTheme.unlock();
        }
        return tmp_ret;
    }
    public final native int GetThemeSysBool(long hTheme, int iBoolId);

    public final int TranslateMessage(Win32.MSG lpMsg) {
        long tmp_0 = lpMsg == null ? 0 : lpMsg.longLockPointer();
        int tmp_ret = TranslateMessage(tmp_0);
        if (lpMsg != null) {
            lpMsg.unlock();
        }
        return tmp_ret;
    }
    public final native int TranslateMessage(long lpMsg);

    public final native long CreateSolidBrush(int param_0);

    public final Int8Pointer OpenThemeData(long hwnd, String pszClassList) {
        Int16Pointer _pszClassList = null == pszClassList? null :  nb.createInt16Pointer(pszClassList, false);
        long tmp_0 = _pszClassList == null ? 0 : _pszClassList.longLockPointer();
        long tmp_ret = OpenThemeData(hwnd, tmp_0);
        if (_pszClassList != null) {
            _pszClassList.unlock();
            _pszClassList.free();
        }
        return nb.createInt8Pointer(tmp_ret);
    }
    public final Int8Pointer OpenThemeData(long hwnd, Int16Pointer pszClassList) {
        long tmp_0 = pszClassList == null ? 0 : pszClassList.longLockPointer();
        long tmp_ret = OpenThemeData(hwnd, tmp_0);
        if (pszClassList != null) {
            pszClassList.unlock();
        }
        return nb.createInt8Pointer(tmp_ret);
    }
    public final native long OpenThemeData(long hwnd, long pszClassList);

    public final int GetWindowPlacement(long hWnd, Win32.WINDOWPLACEMENT lpwndpl) {
        long tmp_0 = lpwndpl == null ? 0 : lpwndpl.longLockPointer();
        int tmp_ret = GetWindowPlacement(hWnd, tmp_0);
        if (lpwndpl != null) {
            lpwndpl.unlock();
        }
        return tmp_ret;
    }
    public final native int GetWindowPlacement(long hWnd, long lpwndpl);

    public final native int ReleaseCapture();

    public final int MultiByteToWideChar(int CodePage, int dwFlags, String lpMultiByteStr, int cbMultiByte, Int16Pointer lpWideCharStr, int cchWideChar) {
        Int8Pointer _lpMultiByteStr = null == lpMultiByteStr? null :  nb.createInt8Pointer(lpMultiByteStr, false);
        long tmp_0 = _lpMultiByteStr == null ? 0 : _lpMultiByteStr.longLockPointer();
        long tmp_1 = lpWideCharStr == null ? 0 : lpWideCharStr.longLockPointer();
        int tmp_ret = MultiByteToWideChar(CodePage, dwFlags, tmp_0, cbMultiByte, tmp_1, cchWideChar);
        if (_lpMultiByteStr != null) {
            _lpMultiByteStr.unlock();
            _lpMultiByteStr.free();
        }
        if (lpWideCharStr != null) {
            lpWideCharStr.unlock();
        }
        return tmp_ret;
    }
    public final int MultiByteToWideChar(int CodePage, int dwFlags, Int8Pointer lpMultiByteStr, int cbMultiByte, Int16Pointer lpWideCharStr, int cchWideChar) {
        long tmp_0 = lpMultiByteStr == null ? 0 : lpMultiByteStr.longLockPointer();
        long tmp_1 = lpWideCharStr == null ? 0 : lpWideCharStr.longLockPointer();
        int tmp_ret = MultiByteToWideChar(CodePage, dwFlags, tmp_0, cbMultiByte, tmp_1, cchWideChar);
        if (lpMultiByteStr != null) {
            lpMultiByteStr.unlock();
        }
        if (lpWideCharStr != null) {
            lpWideCharStr.unlock();
        }
        return tmp_ret;
    }
    public final native int MultiByteToWideChar(int CodePage, int dwFlags, long lpMultiByteStr, int cbMultiByte, long lpWideCharStr, int cchWideChar);

    public final int PlaySoundW(String pszSound, long hmod, int fdwSound) {
        Int16Pointer _pszSound = null == pszSound? null :  nb.createInt16Pointer(pszSound, false);
        long tmp_0 = _pszSound == null ? 0 : _pszSound.longLockPointer();
        int tmp_ret = PlaySoundW(tmp_0, hmod, fdwSound);
        if (_pszSound != null) {
            _pszSound.unlock();
            _pszSound.free();
        }
        return tmp_ret;
    }
    public final int PlaySoundW(Int16Pointer pszSound, long hmod, int fdwSound) {
        long tmp_0 = pszSound == null ? 0 : pszSound.longLockPointer();
        int tmp_ret = PlaySoundW(tmp_0, hmod, fdwSound);
        if (pszSound != null) {
            pszSound.unlock();
        }
        return tmp_ret;
    }
    public final native int PlaySoundW(long pszSound, long hmod, int fdwSound);

    public final int GetObjectW(VoidPointer param_0, int param_1, VoidPointer param_2) {
        long tmp_0 = param_0 == null ? 0 : param_0.longLockPointer();
        long tmp_1 = param_2 == null ? 0 : param_2.longLockPointer();
        int tmp_ret = GetObjectW(tmp_0, param_1, tmp_1);
        if (param_0 != null) {
            param_0.unlock();
        }
        if (param_2 != null) {
            param_2.unlock();
        }
        return tmp_ret;
    }
    public final native int GetObjectW(long param_0, int param_1, long param_2);

    public final long LoadCursorW(long hInstance, String lpCursorName) {
        Int16Pointer _lpCursorName = null == lpCursorName? null :  nb.createInt16Pointer(lpCursorName, false);
        long tmp_0 = _lpCursorName == null ? 0 : _lpCursorName.longLockPointer();
        long tmp_ret = LoadCursorW(hInstance, tmp_0);
        if (_lpCursorName != null) {
            _lpCursorName.unlock();
            _lpCursorName.free();
        }
        return tmp_ret;
    }
    public final long LoadCursorW(long hInstance, Int16Pointer lpCursorName) {
        long tmp_0 = lpCursorName == null ? 0 : lpCursorName.longLockPointer();
        long tmp_ret = LoadCursorW(hInstance, tmp_0);
        if (lpCursorName != null) {
            lpCursorName.unlock();
        }
        return tmp_ret;
    }
    public final native long LoadCursorW(long hInstance, long lpCursorName);

    public final native int EnableTheming(int fEnable);

    public final native int IsIconic(long hWnd);

    public final native int EnableWindow(long hWnd, int bEnable);

    public final native int PostMessageW(long hWnd, int Msg, long wParam, long lParam);

    public final Int8Pointer GlobalLock(VoidPointer hMem) {
        long tmp_0 = hMem == null ? 0 : hMem.longLockPointer();
        long tmp_ret = GlobalLock(tmp_0);
        if (hMem != null) {
            hMem.unlock();
        }
        return nb.createInt8Pointer(tmp_ret);
    }
    public final native long GlobalLock(long hMem);

    public final native int ReleaseDC(long hWnd, long hDC);

    public final int GetKeyboardLayoutList(int nBuff, PointerPointer lpList) {
        long tmp_0 = lpList == null ? 0 : lpList.longLockPointer();
        int tmp_ret = GetKeyboardLayoutList(nBuff, tmp_0);
        if (lpList != null) {
            lpList.unlock();
        }
        return tmp_ret;
    }
    public final native int GetKeyboardLayoutList(int nBuff, long lpList);

    public final Int8Pointer SelectObject(long param_0, VoidPointer param_1) {
        long tmp_0 = param_1 == null ? 0 : param_1.longLockPointer();
        long tmp_ret = SelectObject(param_0, tmp_0);
        if (param_1 != null) {
            param_1.unlock();
        }
        return nb.createInt8Pointer(tmp_ret);
    }
    public final native long SelectObject(long param_0, long param_1);

    public final native long GetKeyboardLayout(int idThread);

    public final int GetWindowRect(long hWnd, Win32.RECT lpRect) {
        long tmp_0 = lpRect == null ? 0 : lpRect.longLockPointer();
        int tmp_ret = GetWindowRect(hWnd, tmp_0);
        if (lpRect != null) {
            lpRect.unlock();
        }
        return tmp_ret;
    }
    public final native int GetWindowRect(long hWnd, long lpRect);

    public final int DrawEdge(long hdc, Win32.RECT qrc, int edge, int grfFlags) {
        long tmp_0 = qrc == null ? 0 : qrc.longLockPointer();
        int tmp_ret = DrawEdge(hdc, tmp_0, edge, grfFlags);
        if (qrc != null) {
            qrc.unlock();
        }
        return tmp_ret;
    }
    public final native int DrawEdge(long hdc, long qrc, int edge, int grfFlags);

    public final int GetMessageW(Win32.MSG lpMsg, long hWnd, int wMsgFilterMin, int wMsgFilterMax) {
        long tmp_0 = lpMsg == null ? 0 : lpMsg.longLockPointer();
        int tmp_ret = GetMessageW(tmp_0, hWnd, wMsgFilterMin, wMsgFilterMax);
        if (lpMsg != null) {
            lpMsg.unlock();
        }
        return tmp_ret;
    }
    public final native int GetMessageW(long lpMsg, long hWnd, int wMsgFilterMin, int wMsgFilterMax);

    public final native int GetPixelFormat(long param_0);

    public final Int8Pointer SetClipboardData(int uFormat, VoidPointer hMem) {
        long tmp_0 = hMem == null ? 0 : hMem.longLockPointer();
        long tmp_ret = SetClipboardData(uFormat, tmp_0);
        if (hMem != null) {
            hMem.unlock();
        }
        return nb.createInt8Pointer(tmp_ret);
    }
    public final native long SetClipboardData(int uFormat, long hMem);

    public final native int MulDiv(int nNumber, int nNumerator, int nDenominator);

    public final long CreateBitmap(int param_0, int param_1, int param_2, int param_3, VoidPointer param_4) {
        long tmp_0 = param_4 == null ? 0 : param_4.longLockPointer();
        long tmp_ret = CreateBitmap(param_0, param_1, param_2, param_3, tmp_0);
        if (param_4 != null) {
            param_4.unlock();
        }
        return tmp_ret;
    }
    public final native long CreateBitmap(int param_0, int param_1, int param_2, int param_3, long param_4);

    public final int GetClipboardFormatNameW(int format, Int16Pointer lpszFormatName, int cchMaxCount) {
        long tmp_0 = lpszFormatName == null ? 0 : lpszFormatName.longLockPointer();
        int tmp_ret = GetClipboardFormatNameW(format, tmp_0, cchMaxCount);
        if (lpszFormatName != null) {
            lpszFormatName.unlock();
        }
        return tmp_ret;
    }
    public final native int GetClipboardFormatNameW(int format, long lpszFormatName, int cchMaxCount);

    public final native int SetWindowPos(long hWnd, long hWndInsertAfter, int X, int Y, int cx, int cy, int uFlags);

    public final native int ImmSetOpenStatus(long param_0, int param_1);

    public final native int SetCaretPos(int X, int Y);

    public final int GetOpenFileNameW(Win32.OPENFILENAMEW param_0) {
        long tmp_0 = param_0 == null ? 0 : param_0.longLockPointer();
        int tmp_ret = GetOpenFileNameW(tmp_0);
        if (param_0 != null) {
            param_0.unlock();
        }
        return tmp_ret;
    }
    public final native int GetOpenFileNameW(long param_0);

    public final long CreateDIBSection(long param_0, Win32.BITMAPINFO param_1, int param_2, PointerPointer param_3, VoidPointer param_4, int param_5) {
        long tmp_0 = param_1 == null ? 0 : param_1.longLockPointer();
        long tmp_1 = param_3 == null ? 0 : param_3.longLockPointer();
        long tmp_2 = param_4 == null ? 0 : param_4.longLockPointer();
        long tmp_ret = CreateDIBSection(param_0, tmp_0, param_2, tmp_1, tmp_2, param_5);
        if (param_1 != null) {
            param_1.unlock();
        }
        if (param_3 != null) {
            param_3.unlock();
        }
        if (param_4 != null) {
            param_4.unlock();
        }
        return tmp_ret;
    }
    public final native long CreateDIBSection(long param_0, long param_1, int param_2, long param_3, long param_4, int param_5);

    public final native int SetBkMode(long param_0, int param_1);

    public final native int Rectangle(long param_0, int param_1, int param_2, int param_3, int param_4);

    public final native int GetDoubleClickTime();

    public final int GetClientRect(long hWnd, Win32.RECT lpRect) {
        long tmp_0 = lpRect == null ? 0 : lpRect.longLockPointer();
        int tmp_ret = GetClientRect(hWnd, tmp_0);
        if (lpRect != null) {
            lpRect.unlock();
        }
        return tmp_ret;
    }
    public final native int GetClientRect(long hWnd, long lpRect);

    public final native int UpdateWindow(long hWnd);

    public final native long GlobalAlloc(int uFlags, long dwBytes);

    public final native int ChangeClipboardChain(long hWndRemove, long hWndNewNext);

    public final native int OpenClipboard(long hWndNewOwner);


    public static class IDirectDraw7 extends CommonStructWrapper {

        public static final int sizeof = NativeBridge.is64 ? 8 : 4;

        IDirectDraw7Vtbl vtbl;
        IDirectDraw7(long addr) {
            super(addr);
            vtbl = get_lpVtbl();
        }
        public final IDirectDraw7Vtbl get_lpVtbl() {
            return instance.createIDirectDraw7Vtbl(byteBase.getAddress(0));
        }
        public final int QueryInterface(Win32.GUID riid, PointerPointer ppvObj) {
            return vtbl.QueryInterface(this, riid, ppvObj);
        }
        public final int AddRef() {
            return vtbl.AddRef(this);
        }
        public final int Release() {
            return vtbl.Release(this);
        }
        public final int Compact() {
            return vtbl.Compact(this);
        }
        public final int CreateClipper(int param_1, PointerPointer param_2, Win32.IUnknown param_3) {
            return vtbl.CreateClipper(this, param_1, param_2, param_3);
        }
        public final int CreatePalette(int param_1, PALETTEENTRY param_2, PointerPointer param_3, Win32.IUnknown param_4) {
            return vtbl.CreatePalette(this, param_1, param_2, param_3, param_4);
        }
        public final int CreateSurface(DDSURFACEDESC2 param_1, PointerPointer param_2, Win32.IUnknown param_3) {
            return vtbl.CreateSurface(this, param_1, param_2, param_3);
        }
        public final int DuplicateSurface(IDirectDrawSurface7 param_1, PointerPointer param_2) {
            return vtbl.DuplicateSurface(this, param_1, param_2);
        }
        public final int EnumDisplayModes(int param_1, DDSURFACEDESC2 param_2, VoidPointer param_3, long param_4) {
            return vtbl.EnumDisplayModes(this, param_1, param_2, param_3, param_4);
        }
        public final int EnumSurfaces(int param_1, DDSURFACEDESC2 param_2, VoidPointer param_3, long param_4) {
            return vtbl.EnumSurfaces(this, param_1, param_2, param_3, param_4);
        }
        public final int FlipToGDISurface() {
            return vtbl.FlipToGDISurface(this);
        }
        public final int GetCaps(DDCAPS_DX7 param_1, DDCAPS_DX7 param_2) {
            return vtbl.GetCaps(this, param_1, param_2);
        }
        public final int GetDisplayMode(DDSURFACEDESC2 param_1) {
            return vtbl.GetDisplayMode(this, param_1);
        }
        public final int GetFourCCCodes(Int32Pointer param_1, Int32Pointer param_2) {
            return vtbl.GetFourCCCodes(this, param_1, param_2);
        }
        public final int GetGDISurface(PointerPointer param_1) {
            return vtbl.GetGDISurface(this, param_1);
        }
        public final int GetMonitorFrequency(Int32Pointer param_1) {
            return vtbl.GetMonitorFrequency(this, param_1);
        }
        public final int GetScanLine(Int32Pointer param_1) {
            return vtbl.GetScanLine(this, param_1);
        }
        public final int GetVerticalBlankStatus(Int32Pointer param_1) {
            return vtbl.GetVerticalBlankStatus(this, param_1);
        }
        public final int Initialize(Win32.GUID param_1) {
            return vtbl.Initialize(this, param_1);
        }
        public final int RestoreDisplayMode() {
            return vtbl.RestoreDisplayMode(this);
        }
        public final int SetCooperativeLevel(long param_1, int param_2) {
            return vtbl.SetCooperativeLevel(this, param_1, param_2);
        }
        public final int SetDisplayMode(int param_1, int param_2, int param_3, int param_4, int param_5) {
            return vtbl.SetDisplayMode(this, param_1, param_2, param_3, param_4, param_5);
        }
        public final int WaitForVerticalBlank(int param_1, VoidPointer param_2) {
            return vtbl.WaitForVerticalBlank(this, param_1, param_2);
        }
        public final int GetAvailableVidMem(DDSCAPS2 param_1, Int32Pointer param_2, Int32Pointer param_3) {
            return vtbl.GetAvailableVidMem(this, param_1, param_2, param_3);
        }
        public final int GetSurfaceFromDC(long param_1, PointerPointer param_2) {
            return vtbl.GetSurfaceFromDC(this, param_1, param_2);
        }
        public final int RestoreAllSurfaces() {
            return vtbl.RestoreAllSurfaces(this);
        }
        public final int TestCooperativeLevel() {
            return vtbl.TestCooperativeLevel(this);
        }
        public final int GetDeviceIdentifier(DDDEVICEIDENTIFIER2 param_1, int param_2) {
            return vtbl.GetDeviceIdentifier(this, param_1, param_2);
        }
        public final int StartModeTest(SIZE param_1, int param_2, int param_3) {
            return vtbl.StartModeTest(this, param_1, param_2, param_3);
        }
        public final int EvaluateMode(int param_1, Int32Pointer param_2) {
            return vtbl.EvaluateMode(this, param_1, param_2);
        }
        @Override
        public int size() {
            return sizeof;
        }
    }

    public final IDirectDraw7 createIDirectDraw7(long addr) {
        return new IDirectDraw7(addr);
    }


    public static class IDirectDraw extends CommonStructWrapper {

        public static final int sizeof = NativeBridge.is64 ? 8 : 4;

        IDirectDrawVtbl vtbl;
        IDirectDraw(long addr) {
            super(addr);
            vtbl = get_lpVtbl();
        }
        public final IDirectDrawVtbl get_lpVtbl() {
            return instance.createIDirectDrawVtbl(byteBase.getAddress(0));
        }
        public final int QueryInterface(Win32.GUID riid, PointerPointer ppvObj) {
            return vtbl.QueryInterface(this, riid, ppvObj);
        }
        public final int AddRef() {
            return vtbl.AddRef(this);
        }
        public final int Release() {
            return vtbl.Release(this);
        }
        public final int Compact() {
            return vtbl.Compact(this);
        }
        public final int CreateClipper(int param_1, PointerPointer param_2, Win32.IUnknown param_3) {
            return vtbl.CreateClipper(this, param_1, param_2, param_3);
        }
        public final int CreatePalette(int param_1, PALETTEENTRY param_2, PointerPointer param_3, Win32.IUnknown param_4) {
            return vtbl.CreatePalette(this, param_1, param_2, param_3, param_4);
        }
        public final int CreateSurface(DDSURFACEDESC param_1, PointerPointer param_2, Win32.IUnknown param_3) {
            return vtbl.CreateSurface(this, param_1, param_2, param_3);
        }
        public final int DuplicateSurface(IDirectDrawSurface param_1, PointerPointer param_2) {
            return vtbl.DuplicateSurface(this, param_1, param_2);
        }
        public final int EnumDisplayModes(int param_1, DDSURFACEDESC param_2, VoidPointer param_3, long param_4) {
            return vtbl.EnumDisplayModes(this, param_1, param_2, param_3, param_4);
        }
        public final int EnumSurfaces(int param_1, DDSURFACEDESC param_2, VoidPointer param_3, long param_4) {
            return vtbl.EnumSurfaces(this, param_1, param_2, param_3, param_4);
        }
        public final int FlipToGDISurface() {
            return vtbl.FlipToGDISurface(this);
        }
        public final int GetCaps(DDCAPS_DX7 param_1, DDCAPS_DX7 param_2) {
            return vtbl.GetCaps(this, param_1, param_2);
        }
        public final int GetDisplayMode(DDSURFACEDESC param_1) {
            return vtbl.GetDisplayMode(this, param_1);
        }
        public final int GetFourCCCodes(Int32Pointer param_1, Int32Pointer param_2) {
            return vtbl.GetFourCCCodes(this, param_1, param_2);
        }
        public final int GetGDISurface(PointerPointer param_1) {
            return vtbl.GetGDISurface(this, param_1);
        }
        public final int GetMonitorFrequency(Int32Pointer param_1) {
            return vtbl.GetMonitorFrequency(this, param_1);
        }
        public final int GetScanLine(Int32Pointer param_1) {
            return vtbl.GetScanLine(this, param_1);
        }
        public final int GetVerticalBlankStatus(Int32Pointer param_1) {
            return vtbl.GetVerticalBlankStatus(this, param_1);
        }
        public final int Initialize(Win32.GUID param_1) {
            return vtbl.Initialize(this, param_1);
        }
        public final int RestoreDisplayMode() {
            return vtbl.RestoreDisplayMode(this);
        }
        public final int SetCooperativeLevel(long param_1, int param_2) {
            return vtbl.SetCooperativeLevel(this, param_1, param_2);
        }
        public final int SetDisplayMode(int param_1, int param_2, int param_3) {
            return vtbl.SetDisplayMode(this, param_1, param_2, param_3);
        }
        public final int WaitForVerticalBlank(int param_1, VoidPointer param_2) {
            return vtbl.WaitForVerticalBlank(this, param_1, param_2);
        }
        @Override
        public int size() {
            return sizeof;
        }
    }

    public final IDirectDraw createIDirectDraw(long addr) {
        return new IDirectDraw(addr);
    }


    public static class IEnumIDList extends CommonStructWrapper {

        public static final int sizeof = NativeBridge.is64 ? 8 : 4;

        IEnumIDListVtbl vtbl;
        IEnumIDList(long addr) {
            super(addr);
            vtbl = get_lpVtbl();
        }
        public final IEnumIDListVtbl get_lpVtbl() {
            return instance.createIEnumIDListVtbl(byteBase.getAddress(0));
        }
        public final int QueryInterface(Win32.GUID riid, PointerPointer ppvObject) {
            return vtbl.QueryInterface(this, riid, ppvObject);
        }
        public final int AddRef() {
            return vtbl.AddRef(this);
        }
        public final int Release() {
            return vtbl.Release(this);
        }
        public final int Next(int celt, PointerPointer rgelt, Int32Pointer pceltFetched) {
            return vtbl.Next(this, celt, rgelt, pceltFetched);
        }
        public final int Skip(int celt) {
            return vtbl.Skip(this, celt);
        }
        public final int Reset() {
            return vtbl.Reset(this);
        }
        public final int Clone(PointerPointer ppenum) {
            return vtbl.Clone(this, ppenum);
        }
        @Override
        public int size() {
            return sizeof;
        }
    }

    public final IEnumIDList createIEnumIDList(long addr) {
        return new IEnumIDList(addr);
    }


    public static class IDirectDrawClipper extends CommonStructWrapper {

        public static final int sizeof = NativeBridge.is64 ? 8 : 4;

        IDirectDrawClipperVtbl vtbl;
        IDirectDrawClipper(long addr) {
            super(addr);
            vtbl = get_lpVtbl();
        }
        public final IDirectDrawClipperVtbl get_lpVtbl() {
            return instance.createIDirectDrawClipperVtbl(byteBase.getAddress(0));
        }
        public final int QueryInterface(Win32.GUID riid, PointerPointer ppvObj) {
            return vtbl.QueryInterface(this, riid, ppvObj);
        }
        public final int AddRef() {
            return vtbl.AddRef(this);
        }
        public final int Release() {
            return vtbl.Release(this);
        }
        public final int GetClipList(Win32.RECT param_1, Win32.RGNDATA param_2, Int32Pointer param_3) {
            return vtbl.GetClipList(this, param_1, param_2, param_3);
        }
        public final int GetHWnd(PointerPointer param_1) {
            return vtbl.GetHWnd(this, param_1);
        }
        public final int Initialize(Win32.IDirectDraw param_1, int param_2) {
            return vtbl.Initialize(this, param_1, param_2);
        }
        public final int IsClipListChanged(Int32Pointer param_1) {
            return vtbl.IsClipListChanged(this, param_1);
        }
        public final int SetClipList(Win32.RGNDATA param_1, int param_2) {
            return vtbl.SetClipList(this, param_1, param_2);
        }
        public final int SetHWnd(int param_1, long param_2) {
            return vtbl.SetHWnd(this, param_1, param_2);
        }
        @Override
        public int size() {
            return sizeof;
        }
    }

    public final IDirectDrawClipper createIDirectDrawClipper(long addr) {
        return new IDirectDrawClipper(addr);
    }


    public static class IDirectDrawPalette extends CommonStructWrapper {

        public static final int sizeof = NativeBridge.is64 ? 8 : 4;

        IDirectDrawPaletteVtbl vtbl;
        IDirectDrawPalette(long addr) {
            super(addr);
            vtbl = get_lpVtbl();
        }
        public final IDirectDrawPaletteVtbl get_lpVtbl() {
            return instance.createIDirectDrawPaletteVtbl(byteBase.getAddress(0));
        }
        public final int QueryInterface(Win32.GUID riid, PointerPointer ppvObj) {
            return vtbl.QueryInterface(this, riid, ppvObj);
        }
        public final int AddRef() {
            return vtbl.AddRef(this);
        }
        public final int Release() {
            return vtbl.Release(this);
        }
        public final int GetCaps(Int32Pointer param_1) {
            return vtbl.GetCaps(this, param_1);
        }
        public final int GetEntries(int param_1, int param_2, int param_3, PALETTEENTRY param_4) {
            return vtbl.GetEntries(this, param_1, param_2, param_3, param_4);
        }
        public final int Initialize(Win32.IDirectDraw param_1, int param_2, PALETTEENTRY param_3) {
            return vtbl.Initialize(this, param_1, param_2, param_3);
        }
        public final int SetEntries(int param_1, int param_2, int param_3, PALETTEENTRY param_4) {
            return vtbl.SetEntries(this, param_1, param_2, param_3, param_4);
        }
        @Override
        public int size() {
            return sizeof;
        }
    }

    public final IDirectDrawPalette createIDirectDrawPalette(long addr) {
        return new IDirectDrawPalette(addr);
    }


    public static class IDirectDrawPaletteVtbl extends CommonStructWrapper {

        public static final int sizeof = NativeBridge.is64 ? 56 : 28;

        IDirectDrawPaletteVtbl(boolean direct) {
            super(sizeof, direct);
        }
        IDirectDrawPaletteVtbl(VoidPointer base) {
            super(base);
        }
        IDirectDrawPaletteVtbl(long addr) {
            super(addr);
        }
        public final void set_QueryInterface(long val) {
            byteBase.setAddress(0, val);
        }
        public final long get_QueryInterface() {
            return byteBase.getAddress(0);
        }
        public final int QueryInterface(Win32.IDirectDrawPalette This, Win32.GUID riid, PointerPointer ppvObj) {
            long tmp_0 = This == null ? 0 : This.longLockPointer();
            long tmp_1 = riid == null ? 0 : riid.longLockPointer();
            long tmp_2 = ppvObj == null ? 0 : ppvObj.longLockPointer();
            int tmp_ret = instance.proxycall31(get_QueryInterface(), tmp_0, tmp_1, tmp_2);
            if (This != null) {
                This.unlock();
            }
            if (riid != null) {
                riid.unlock();
            }
            if (ppvObj != null) {
                ppvObj.unlock();
            }
            return tmp_ret;
        }
        public final void set_AddRef(long val) {
            byteBase.setAddress(NativeBridge.is64 ? 8 : 4, val);
        }
        public final long get_AddRef() {
            return byteBase.getAddress(NativeBridge.is64 ? 8 : 4);
        }
        public final int AddRef(Win32.IDirectDrawPalette This) {
            long tmp_0 = This == null ? 0 : This.longLockPointer();
            int tmp_ret = instance.proxycall32(get_AddRef(), tmp_0);
            if (This != null) {
                This.unlock();
            }
            return tmp_ret;
        }
        public final void set_Release(long val) {
            byteBase.setAddress(NativeBridge.is64 ? 16 : 8, val);
        }
        public final long get_Release() {
            return byteBase.getAddress(NativeBridge.is64 ? 16 : 8);
        }
        public final int Release(Win32.IDirectDrawPalette This) {
            long tmp_0 = This == null ? 0 : This.longLockPointer();
            int tmp_ret = instance.proxycall33(get_Release(), tmp_0);
            if (This != null) {
                This.unlock();
            }
            return tmp_ret;
        }
        public final void set_GetCaps(long val) {
            byteBase.setAddress(NativeBridge.is64 ? 24 : 12, val);
        }
        public final long get_GetCaps() {
            return byteBase.getAddress(NativeBridge.is64 ? 24 : 12);
        }
        public final int GetCaps(Win32.IDirectDrawPalette This, Int32Pointer param_1) {
            long tmp_0 = This == null ? 0 : This.longLockPointer();
            long tmp_1 = param_1 == null ? 0 : param_1.longLockPointer();
            int tmp_ret = instance.proxycall34(get_GetCaps(), tmp_0, tmp_1);
            if (This != null) {
                This.unlock();
            }
            if (param_1 != null) {
                param_1.unlock();
            }
            return tmp_ret;
        }
        public final void set_GetEntries(long val) {
            byteBase.setAddress(NativeBridge.is64 ? 32 : 16, val);
        }
        public final long get_GetEntries() {
            return byteBase.getAddress(NativeBridge.is64 ? 32 : 16);
        }
        public final int GetEntries(Win32.IDirectDrawPalette This, int param_1, int param_2, int param_3, PALETTEENTRY param_4) {
            long tmp_0 = This == null ? 0 : This.longLockPointer();
            long tmp_1 = param_4 == null ? 0 : param_4.longLockPointer();
            int tmp_ret = instance.proxycall35(get_GetEntries(), tmp_0, param_1, param_2, param_3, tmp_1);
            if (This != null) {
                This.unlock();
            }
            if (param_4 != null) {
                param_4.unlock();
            }
            return tmp_ret;
        }
        public final void set_Initialize(long val) {
            byteBase.setAddress(NativeBridge.is64 ? 40 : 20, val);
        }
        public final long get_Initialize() {
            return byteBase.getAddress(NativeBridge.is64 ? 40 : 20);
        }
        public final int Initialize(Win32.IDirectDrawPalette This, Win32.IDirectDraw param_1, int param_2, PALETTEENTRY param_3) {
            long tmp_0 = This == null ? 0 : This.longLockPointer();
            long tmp_1 = param_1 == null ? 0 : param_1.longLockPointer();
            long tmp_2 = param_3 == null ? 0 : param_3.longLockPointer();
            int tmp_ret = instance.proxycall36(get_Initialize(), tmp_0, tmp_1, param_2, tmp_2);
            if (This != null) {
                This.unlock();
            }
            if (param_1 != null) {
                param_1.unlock();
            }
            if (param_3 != null) {
                param_3.unlock();
            }
            return tmp_ret;
        }
        public final void set_SetEntries(long val) {
            byteBase.setAddress(NativeBridge.is64 ? 48 : 24, val);
        }
        public final long get_SetEntries() {
            return byteBase.getAddress(NativeBridge.is64 ? 48 : 24);
        }
        public final int SetEntries(Win32.IDirectDrawPalette This, int param_1, int param_2, int param_3, PALETTEENTRY param_4) {
            long tmp_0 = This == null ? 0 : This.longLockPointer();
            long tmp_1 = param_4 == null ? 0 : param_4.longLockPointer();
            int tmp_ret = instance.proxycall37(get_SetEntries(), tmp_0, param_1, param_2, param_3, tmp_1);
            if (This != null) {
                This.unlock();
            }
            if (param_4 != null) {
                param_4.unlock();
            }
            return tmp_ret;
        }
        @Override
        public int size() {
            return sizeof;
        }
    }

    public final IDirectDrawPaletteVtbl createIDirectDrawPaletteVtbl(boolean direct) {
        return new IDirectDrawPaletteVtbl(direct);
    }
    public final IDirectDrawPaletteVtbl createIDirectDrawPaletteVtbl(VoidPointer base) {
        return new IDirectDrawPaletteVtbl(base);
    }
    public final IDirectDrawPaletteVtbl createIDirectDrawPaletteVtbl(long addr) {
        return new IDirectDrawPaletteVtbl(addr);
    }


    public static class IDirectDraw7Vtbl extends CommonStructWrapper {

        public static final int sizeof = NativeBridge.is64 ? 240 : 120;

        IDirectDraw7Vtbl(boolean direct) {
            super(sizeof, direct);
        }
        IDirectDraw7Vtbl(VoidPointer base) {
            super(base);
        }
        IDirectDraw7Vtbl(long addr) {
            super(addr);
        }
        public final void set_QueryInterface(long val) {
            byteBase.setAddress(0, val);
        }
        public final long get_QueryInterface() {
            return byteBase.getAddress(0);
        }
        public final int QueryInterface(Win32.IDirectDraw7 This, Win32.GUID riid, PointerPointer ppvObj) {
            long tmp_0 = This == null ? 0 : This.longLockPointer();
            long tmp_1 = riid == null ? 0 : riid.longLockPointer();
            long tmp_2 = ppvObj == null ? 0 : ppvObj.longLockPointer();
            int tmp_ret = instance.proxycall38(get_QueryInterface(), tmp_0, tmp_1, tmp_2);
            if (This != null) {
                This.unlock();
            }
            if (riid != null) {
                riid.unlock();
            }
            if (ppvObj != null) {
                ppvObj.unlock();
            }
            return tmp_ret;
        }
        public final void set_AddRef(long val) {
            byteBase.setAddress(NativeBridge.is64 ? 8 : 4, val);
        }
        public final long get_AddRef() {
            return byteBase.getAddress(NativeBridge.is64 ? 8 : 4);
        }
        public final int AddRef(Win32.IDirectDraw7 This) {
            long tmp_0 = This == null ? 0 : This.longLockPointer();
            int tmp_ret = instance.proxycall39(get_AddRef(), tmp_0);
            if (This != null) {
                This.unlock();
            }
            return tmp_ret;
        }
        public final void set_Release(long val) {
            byteBase.setAddress(NativeBridge.is64 ? 16 : 8, val);
        }
        public final long get_Release() {
            return byteBase.getAddress(NativeBridge.is64 ? 16 : 8);
        }
        public final int Release(Win32.IDirectDraw7 This) {
            long tmp_0 = This == null ? 0 : This.longLockPointer();
            int tmp_ret = instance.proxycall40(get_Release(), tmp_0);
            if (This != null) {
                This.unlock();
            }
            return tmp_ret;
        }
        public final void set_Compact(long val) {
            byteBase.setAddress(NativeBridge.is64 ? 24 : 12, val);
        }
        public final long get_Compact() {
            return byteBase.getAddress(NativeBridge.is64 ? 24 : 12);
        }
        public final int Compact(Win32.IDirectDraw7 This) {
            long tmp_0 = This == null ? 0 : This.longLockPointer();
            int tmp_ret = instance.proxycall41(get_Compact(), tmp_0);
            if (This != null) {
                This.unlock();
            }
            return tmp_ret;
        }
        public final void set_CreateClipper(long val) {
            byteBase.setAddress(NativeBridge.is64 ? 32 : 16, val);
        }
        public final long get_CreateClipper() {
            return byteBase.getAddress(NativeBridge.is64 ? 32 : 16);
        }
        public final int CreateClipper(Win32.IDirectDraw7 This, int param_1, PointerPointer param_2, Win32.IUnknown param_3) {
            long tmp_0 = This == null ? 0 : This.longLockPointer();
            long tmp_1 = param_2 == null ? 0 : param_2.longLockPointer();
            long tmp_2 = param_3 == null ? 0 : param_3.longLockPointer();
            int tmp_ret = instance.proxycall42(get_CreateClipper(), tmp_0, param_1, tmp_1, tmp_2);
            if (This != null) {
                This.unlock();
            }
            if (param_2 != null) {
                param_2.unlock();
            }
            if (param_3 != null) {
                param_3.unlock();
            }
            return tmp_ret;
        }
        public final void set_CreatePalette(long val) {
            byteBase.setAddress(NativeBridge.is64 ? 40 : 20, val);
        }
        public final long get_CreatePalette() {
            return byteBase.getAddress(NativeBridge.is64 ? 40 : 20);
        }
        public final int CreatePalette(Win32.IDirectDraw7 This, int param_1, PALETTEENTRY param_2, PointerPointer param_3, Win32.IUnknown param_4) {
            long tmp_0 = This == null ? 0 : This.longLockPointer();
            long tmp_1 = param_2 == null ? 0 : param_2.longLockPointer();
            long tmp_2 = param_3 == null ? 0 : param_3.longLockPointer();
            long tmp_3 = param_4 == null ? 0 : param_4.longLockPointer();
            int tmp_ret = instance.proxycall43(get_CreatePalette(), tmp_0, param_1, tmp_1, tmp_2, tmp_3);
            if (This != null) {
                This.unlock();
            }
            if (param_2 != null) {
                param_2.unlock();
            }
            if (param_3 != null) {
                param_3.unlock();
            }
            if (param_4 != null) {
                param_4.unlock();
            }
            return tmp_ret;
        }
        public final void set_CreateSurface(long val) {
            byteBase.setAddress(NativeBridge.is64 ? 48 : 24, val);
        }
        public final long get_CreateSurface() {
            return byteBase.getAddress(NativeBridge.is64 ? 48 : 24);
        }
        public final int CreateSurface(Win32.IDirectDraw7 This, DDSURFACEDESC2 param_1, PointerPointer param_2, Win32.IUnknown param_3) {
            long tmp_0 = This == null ? 0 : This.longLockPointer();
            long tmp_1 = param_1 == null ? 0 : param_1.longLockPointer();
            long tmp_2 = param_2 == null ? 0 : param_2.longLockPointer();
            long tmp_3 = param_3 == null ? 0 : param_3.longLockPointer();
            int tmp_ret = instance.proxycall44(get_CreateSurface(), tmp_0, tmp_1, tmp_2, tmp_3);
            if (This != null) {
                This.unlock();
            }
            if (param_1 != null) {
                param_1.unlock();
            }
            if (param_2 != null) {
                param_2.unlock();
            }
            if (param_3 != null) {
                param_3.unlock();
            }
            return tmp_ret;
        }
        public final void set_DuplicateSurface(long val) {
            byteBase.setAddress(NativeBridge.is64 ? 56 : 28, val);
        }
        public final long get_DuplicateSurface() {
            return byteBase.getAddress(NativeBridge.is64 ? 56 : 28);
        }
        public final int DuplicateSurface(Win32.IDirectDraw7 This, IDirectDrawSurface7 param_1, PointerPointer param_2) {
            long tmp_0 = This == null ? 0 : This.longLockPointer();
            long tmp_1 = param_1 == null ? 0 : param_1.longLockPointer();
            long tmp_2 = param_2 == null ? 0 : param_2.longLockPointer();
            int tmp_ret = instance.proxycall45(get_DuplicateSurface(), tmp_0, tmp_1, tmp_2);
            if (This != null) {
                This.unlock();
            }
            if (param_1 != null) {
                param_1.unlock();
            }
            if (param_2 != null) {
                param_2.unlock();
            }
            return tmp_ret;
        }
        public final void set_EnumDisplayModes(long val) {
            byteBase.setAddress(NativeBridge.is64 ? 64 : 32, val);
        }
        public final long get_EnumDisplayModes() {
            return byteBase.getAddress(NativeBridge.is64 ? 64 : 32);
        }
        public final int EnumDisplayModes(Win32.IDirectDraw7 This, int param_1, DDSURFACEDESC2 param_2, VoidPointer param_3, long param_4) {
            long tmp_0 = This == null ? 0 : This.longLockPointer();
            long tmp_1 = param_2 == null ? 0 : param_2.longLockPointer();
            long tmp_2 = param_3 == null ? 0 : param_3.longLockPointer();
            int tmp_ret = instance.proxycall46(get_EnumDisplayModes(), tmp_0, param_1, tmp_1, tmp_2, param_4);
            if (This != null) {
                This.unlock();
            }
            if (param_2 != null) {
                param_2.unlock();
            }
            if (param_3 != null) {
                param_3.unlock();
            }
            return tmp_ret;
        }
        public final void set_EnumSurfaces(long val) {
            byteBase.setAddress(NativeBridge.is64 ? 72 : 36, val);
        }
        public final long get_EnumSurfaces() {
            return byteBase.getAddress(NativeBridge.is64 ? 72 : 36);
        }
        public final int EnumSurfaces(Win32.IDirectDraw7 This, int param_1, DDSURFACEDESC2 param_2, VoidPointer param_3, long param_4) {
            long tmp_0 = This == null ? 0 : This.longLockPointer();
            long tmp_1 = param_2 == null ? 0 : param_2.longLockPointer();
            long tmp_2 = param_3 == null ? 0 : param_3.longLockPointer();
            int tmp_ret = instance.proxycall47(get_EnumSurfaces(), tmp_0, param_1, tmp_1, tmp_2, param_4);
            if (This != null) {
                This.unlock();
            }
            if (param_2 != null) {
                param_2.unlock();
            }
            if (param_3 != null) {
                param_3.unlock();
            }
            return tmp_ret;
        }
        public final void set_FlipToGDISurface(long val) {
            byteBase.setAddress(NativeBridge.is64 ? 80 : 40, val);
        }
        public final long get_FlipToGDISurface() {
            return byteBase.getAddress(NativeBridge.is64 ? 80 : 40);
        }
        public final int FlipToGDISurface(Win32.IDirectDraw7 This) {
            long tmp_0 = This == null ? 0 : This.longLockPointer();
            int tmp_ret = instance.proxycall48(get_FlipToGDISurface(), tmp_0);
            if (This != null) {
                This.unlock();
            }
            return tmp_ret;
        }
        public final void set_GetCaps(long val) {
            byteBase.setAddress(NativeBridge.is64 ? 88 : 44, val);
        }
        public final long get_GetCaps() {
            return byteBase.getAddress(NativeBridge.is64 ? 88 : 44);
        }
        public final int GetCaps(Win32.IDirectDraw7 This, DDCAPS_DX7 param_1, DDCAPS_DX7 param_2) {
            long tmp_0 = This == null ? 0 : This.longLockPointer();
            long tmp_1 = param_1 == null ? 0 : param_1.longLockPointer();
            long tmp_2 = param_2 == null ? 0 : param_2.longLockPointer();
            int tmp_ret = instance.proxycall49(get_GetCaps(), tmp_0, tmp_1, tmp_2);
            if (This != null) {
                This.unlock();
            }
            if (param_1 != null) {
                param_1.unlock();
            }
            if (param_2 != null) {
                param_2.unlock();
            }
            return tmp_ret;
        }
        public final void set_GetDisplayMode(long val) {
            byteBase.setAddress(NativeBridge.is64 ? 96 : 48, val);
        }
        public final long get_GetDisplayMode() {
            return byteBase.getAddress(NativeBridge.is64 ? 96 : 48);
        }
        public final int GetDisplayMode(Win32.IDirectDraw7 This, DDSURFACEDESC2 param_1) {
            long tmp_0 = This == null ? 0 : This.longLockPointer();
            long tmp_1 = param_1 == null ? 0 : param_1.longLockPointer();
            int tmp_ret = instance.proxycall50(get_GetDisplayMode(), tmp_0, tmp_1);
            if (This != null) {
                This.unlock();
            }
            if (param_1 != null) {
                param_1.unlock();
            }
            return tmp_ret;
        }
        public final void set_GetFourCCCodes(long val) {
            byteBase.setAddress(NativeBridge.is64 ? 104 : 52, val);
        }
        public final long get_GetFourCCCodes() {
            return byteBase.getAddress(NativeBridge.is64 ? 104 : 52);
        }
        public final int GetFourCCCodes(Win32.IDirectDraw7 This, Int32Pointer param_1, Int32Pointer param_2) {
            long tmp_0 = This == null ? 0 : This.longLockPointer();
            long tmp_1 = param_1 == null ? 0 : param_1.longLockPointer();
            long tmp_2 = param_2 == null ? 0 : param_2.longLockPointer();
            int tmp_ret = instance.proxycall51(get_GetFourCCCodes(), tmp_0, tmp_1, tmp_2);
            if (This != null) {
                This.unlock();
            }
            if (param_1 != null) {
                param_1.unlock();
            }
            if (param_2 != null) {
                param_2.unlock();
            }
            return tmp_ret;
        }
        public final void set_GetGDISurface(long val) {
            byteBase.setAddress(NativeBridge.is64 ? 112 : 56, val);
        }
        public final long get_GetGDISurface() {
            return byteBase.getAddress(NativeBridge.is64 ? 112 : 56);
        }
        public final int GetGDISurface(Win32.IDirectDraw7 This, PointerPointer param_1) {
            long tmp_0 = This == null ? 0 : This.longLockPointer();
            long tmp_1 = param_1 == null ? 0 : param_1.longLockPointer();
            int tmp_ret = instance.proxycall52(get_GetGDISurface(), tmp_0, tmp_1);
            if (This != null) {
                This.unlock();
            }
            if (param_1 != null) {
                param_1.unlock();
            }
            return tmp_ret;
        }
        public final void set_GetMonitorFrequency(long val) {
            byteBase.setAddress(NativeBridge.is64 ? 120 : 60, val);
        }
        public final long get_GetMonitorFrequency() {
            return byteBase.getAddress(NativeBridge.is64 ? 120 : 60);
        }
        public final int GetMonitorFrequency(Win32.IDirectDraw7 This, Int32Pointer param_1) {
            long tmp_0 = This == null ? 0 : This.longLockPointer();
            long tmp_1 = param_1 == null ? 0 : param_1.longLockPointer();
            int tmp_ret = instance.proxycall53(get_GetMonitorFrequency(), tmp_0, tmp_1);
            if (This != null) {
                This.unlock();
            }
            if (param_1 != null) {
                param_1.unlock();
            }
            return tmp_ret;
        }
        public final void set_GetScanLine(long val) {
            byteBase.setAddress(NativeBridge.is64 ? 128 : 64, val);
        }
        public final long get_GetScanLine() {
            return byteBase.getAddress(NativeBridge.is64 ? 128 : 64);
        }
        public final int GetScanLine(Win32.IDirectDraw7 This, Int32Pointer param_1) {
            long tmp_0 = This == null ? 0 : This.longLockPointer();
            long tmp_1 = param_1 == null ? 0 : param_1.longLockPointer();
            int tmp_ret = instance.proxycall54(get_GetScanLine(), tmp_0, tmp_1);
            if (This != null) {
                This.unlock();
            }
            if (param_1 != null) {
                param_1.unlock();
            }
            return tmp_ret;
        }
        public final void set_GetVerticalBlankStatus(long val) {
            byteBase.setAddress(NativeBridge.is64 ? 136 : 68, val);
        }
        public final long get_GetVerticalBlankStatus() {
            return byteBase.getAddress(NativeBridge.is64 ? 136 : 68);
        }
        public final int GetVerticalBlankStatus(Win32.IDirectDraw7 This, Int32Pointer param_1) {
            long tmp_0 = This == null ? 0 : This.longLockPointer();
            long tmp_1 = param_1 == null ? 0 : param_1.longLockPointer();
            int tmp_ret = instance.proxycall55(get_GetVerticalBlankStatus(), tmp_0, tmp_1);
            if (This != null) {
                This.unlock();
            }
            if (param_1 != null) {
                param_1.unlock();
            }
            return tmp_ret;
        }
        public final void set_Initialize(long val) {
            byteBase.setAddress(NativeBridge.is64 ? 144 : 72, val);
        }
        public final long get_Initialize() {
            return byteBase.getAddress(NativeBridge.is64 ? 144 : 72);
        }
        public final int Initialize(Win32.IDirectDraw7 This, Win32.GUID param_1) {
            long tmp_0 = This == null ? 0 : This.longLockPointer();
            long tmp_1 = param_1 == null ? 0 : param_1.longLockPointer();
            int tmp_ret = instance.proxycall56(get_Initialize(), tmp_0, tmp_1);
            if (This != null) {
                This.unlock();
            }
            if (param_1 != null) {
                param_1.unlock();
            }
            return tmp_ret;
        }
        public final void set_RestoreDisplayMode(long val) {
            byteBase.setAddress(NativeBridge.is64 ? 152 : 76, val);
        }
        public final long get_RestoreDisplayMode() {
            return byteBase.getAddress(NativeBridge.is64 ? 152 : 76);
        }
        public final int RestoreDisplayMode(Win32.IDirectDraw7 This) {
            long tmp_0 = This == null ? 0 : This.longLockPointer();
            int tmp_ret = instance.proxycall57(get_RestoreDisplayMode(), tmp_0);
            if (This != null) {
                This.unlock();
            }
            return tmp_ret;
        }
        public final void set_SetCooperativeLevel(long val) {
            byteBase.setAddress(NativeBridge.is64 ? 160 : 80, val);
        }
        public final long get_SetCooperativeLevel() {
            return byteBase.getAddress(NativeBridge.is64 ? 160 : 80);
        }
        public final int SetCooperativeLevel(Win32.IDirectDraw7 This, long param_1, int param_2) {
            long tmp_0 = This == null ? 0 : This.longLockPointer();
            int tmp_ret = instance.proxycall58(get_SetCooperativeLevel(), tmp_0, param_1, param_2);
            if (This != null) {
                This.unlock();
            }
            return tmp_ret;
        }
        public final void set_SetDisplayMode(long val) {
            byteBase.setAddress(NativeBridge.is64 ? 168 : 84, val);
        }
        public final long get_SetDisplayMode() {
            return byteBase.getAddress(NativeBridge.is64 ? 168 : 84);
        }
        public final int SetDisplayMode(Win32.IDirectDraw7 This, int param_1, int param_2, int param_3, int param_4, int param_5) {
            long tmp_0 = This == null ? 0 : This.longLockPointer();
            int tmp_ret = instance.proxycall59(get_SetDisplayMode(), tmp_0, param_1, param_2, param_3, param_4, param_5);
            if (This != null) {
                This.unlock();
            }
            return tmp_ret;
        }
        public final void set_WaitForVerticalBlank(long val) {
            byteBase.setAddress(NativeBridge.is64 ? 176 : 88, val);
        }
        public final long get_WaitForVerticalBlank() {
            return byteBase.getAddress(NativeBridge.is64 ? 176 : 88);
        }
        public final int WaitForVerticalBlank(Win32.IDirectDraw7 This, int param_1, VoidPointer param_2) {
            long tmp_0 = This == null ? 0 : This.longLockPointer();
            long tmp_1 = param_2 == null ? 0 : param_2.longLockPointer();
            int tmp_ret = instance.proxycall60(get_WaitForVerticalBlank(), tmp_0, param_1, tmp_1);
            if (This != null) {
                This.unlock();
            }
            if (param_2 != null) {
                param_2.unlock();
            }
            return tmp_ret;
        }
        public final void set_GetAvailableVidMem(long val) {
            byteBase.setAddress(NativeBridge.is64 ? 184 : 92, val);
        }
        public final long get_GetAvailableVidMem() {
            return byteBase.getAddress(NativeBridge.is64 ? 184 : 92);
        }
        public final int GetAvailableVidMem(Win32.IDirectDraw7 This, DDSCAPS2 param_1, Int32Pointer param_2, Int32Pointer param_3) {
            long tmp_0 = This == null ? 0 : This.longLockPointer();
            long tmp_1 = param_1 == null ? 0 : param_1.longLockPointer();
            long tmp_2 = param_2 == null ? 0 : param_2.longLockPointer();
            long tmp_3 = param_3 == null ? 0 : param_3.longLockPointer();
            int tmp_ret = instance.proxycall61(get_GetAvailableVidMem(), tmp_0, tmp_1, tmp_2, tmp_3);
            if (This != null) {
                This.unlock();
            }
            if (param_1 != null) {
                param_1.unlock();
            }
            if (param_2 != null) {
                param_2.unlock();
            }
            if (param_3 != null) {
                param_3.unlock();
            }
            return tmp_ret;
        }
        public final void set_GetSurfaceFromDC(long val) {
            byteBase.setAddress(NativeBridge.is64 ? 192 : 96, val);
        }
        public final long get_GetSurfaceFromDC() {
            return byteBase.getAddress(NativeBridge.is64 ? 192 : 96);
        }
        public final int GetSurfaceFromDC(Win32.IDirectDraw7 This, long param_1, PointerPointer param_2) {
            long tmp_0 = This == null ? 0 : This.longLockPointer();
            long tmp_1 = param_2 == null ? 0 : param_2.longLockPointer();
            int tmp_ret = instance.proxycall62(get_GetSurfaceFromDC(), tmp_0, param_1, tmp_1);
            if (This != null) {
                This.unlock();
            }
            if (param_2 != null) {
                param_2.unlock();
            }
            return tmp_ret;
        }
        public final void set_RestoreAllSurfaces(long val) {
            byteBase.setAddress(NativeBridge.is64 ? 200 : 100, val);
        }
        public final long get_RestoreAllSurfaces() {
            return byteBase.getAddress(NativeBridge.is64 ? 200 : 100);
        }
        public final int RestoreAllSurfaces(Win32.IDirectDraw7 This) {
            long tmp_0 = This == null ? 0 : This.longLockPointer();
            int tmp_ret = instance.proxycall63(get_RestoreAllSurfaces(), tmp_0);
            if (This != null) {
                This.unlock();
            }
            return tmp_ret;
        }
        public final void set_TestCooperativeLevel(long val) {
            byteBase.setAddress(NativeBridge.is64 ? 208 : 104, val);
        }
        public final long get_TestCooperativeLevel() {
            return byteBase.getAddress(NativeBridge.is64 ? 208 : 104);
        }
        public final int TestCooperativeLevel(Win32.IDirectDraw7 This) {
            long tmp_0 = This == null ? 0 : This.longLockPointer();
            int tmp_ret = instance.proxycall64(get_TestCooperativeLevel(), tmp_0);
            if (This != null) {
                This.unlock();
            }
            return tmp_ret;
        }
        public final void set_GetDeviceIdentifier(long val) {
            byteBase.setAddress(NativeBridge.is64 ? 216 : 108, val);
        }
        public final long get_GetDeviceIdentifier() {
            return byteBase.getAddress(NativeBridge.is64 ? 216 : 108);
        }
        public final int GetDeviceIdentifier(Win32.IDirectDraw7 This, DDDEVICEIDENTIFIER2 param_1, int param_2) {
            long tmp_0 = This == null ? 0 : This.longLockPointer();
            long tmp_1 = param_1 == null ? 0 : param_1.longLockPointer();
            int tmp_ret = instance.proxycall65(get_GetDeviceIdentifier(), tmp_0, tmp_1, param_2);
            if (This != null) {
                This.unlock();
            }
            if (param_1 != null) {
                param_1.unlock();
            }
            return tmp_ret;
        }
        public final void set_StartModeTest(long val) {
            byteBase.setAddress(NativeBridge.is64 ? 224 : 112, val);
        }
        public final long get_StartModeTest() {
            return byteBase.getAddress(NativeBridge.is64 ? 224 : 112);
        }
        public final int StartModeTest(Win32.IDirectDraw7 This, SIZE param_1, int param_2, int param_3) {
            long tmp_0 = This == null ? 0 : This.longLockPointer();
            long tmp_1 = param_1 == null ? 0 : param_1.longLockPointer();
            int tmp_ret = instance.proxycall66(get_StartModeTest(), tmp_0, tmp_1, param_2, param_3);
            if (This != null) {
                This.unlock();
            }
            if (param_1 != null) {
                param_1.unlock();
            }
            return tmp_ret;
        }
        public final void set_EvaluateMode(long val) {
            byteBase.setAddress(NativeBridge.is64 ? 232 : 116, val);
        }
        public final long get_EvaluateMode() {
            return byteBase.getAddress(NativeBridge.is64 ? 232 : 116);
        }
        public final int EvaluateMode(Win32.IDirectDraw7 This, int param_1, Int32Pointer param_2) {
            long tmp_0 = This == null ? 0 : This.longLockPointer();
            long tmp_1 = param_2 == null ? 0 : param_2.longLockPointer();
            int tmp_ret = instance.proxycall67(get_EvaluateMode(), tmp_0, param_1, tmp_1);
            if (This != null) {
                This.unlock();
            }
            if (param_2 != null) {
                param_2.unlock();
            }
            return tmp_ret;
        }
        @Override
        public int size() {
            return sizeof;
        }
    }

    public final IDirectDraw7Vtbl createIDirectDraw7Vtbl(boolean direct) {
        return new IDirectDraw7Vtbl(direct);
    }
    public final IDirectDraw7Vtbl createIDirectDraw7Vtbl(VoidPointer base) {
        return new IDirectDraw7Vtbl(base);
    }
    public final IDirectDraw7Vtbl createIDirectDraw7Vtbl(long addr) {
        return new IDirectDraw7Vtbl(addr);
    }


    public static class IDirectDrawClipperVtbl extends CommonStructWrapper {

        public static final int sizeof = NativeBridge.is64 ? 72 : 36;

        IDirectDrawClipperVtbl(boolean direct) {
            super(sizeof, direct);
        }
        IDirectDrawClipperVtbl(VoidPointer base) {
            super(base);
        }
        IDirectDrawClipperVtbl(long addr) {
            super(addr);
        }
        public final void set_QueryInterface(long val) {
            byteBase.setAddress(0, val);
        }
        public final long get_QueryInterface() {
            return byteBase.getAddress(0);
        }
        public final int QueryInterface(Win32.IDirectDrawClipper This, Win32.GUID riid, PointerPointer ppvObj) {
            long tmp_0 = This == null ? 0 : This.longLockPointer();
            long tmp_1 = riid == null ? 0 : riid.longLockPointer();
            long tmp_2 = ppvObj == null ? 0 : ppvObj.longLockPointer();
            int tmp_ret = instance.proxycall68(get_QueryInterface(), tmp_0, tmp_1, tmp_2);
            if (This != null) {
                This.unlock();
            }
            if (riid != null) {
                riid.unlock();
            }
            if (ppvObj != null) {
                ppvObj.unlock();
            }
            return tmp_ret;
        }
        public final void set_AddRef(long val) {
            byteBase.setAddress(NativeBridge.is64 ? 8 : 4, val);
        }
        public final long get_AddRef() {
            return byteBase.getAddress(NativeBridge.is64 ? 8 : 4);
        }
        public final int AddRef(Win32.IDirectDrawClipper This) {
            long tmp_0 = This == null ? 0 : This.longLockPointer();
            int tmp_ret = instance.proxycall69(get_AddRef(), tmp_0);
            if (This != null) {
                This.unlock();
            }
            return tmp_ret;
        }
        public final void set_Release(long val) {
            byteBase.setAddress(NativeBridge.is64 ? 16 : 8, val);
        }
        public final long get_Release() {
            return byteBase.getAddress(NativeBridge.is64 ? 16 : 8);
        }
        public final int Release(Win32.IDirectDrawClipper This) {
            long tmp_0 = This == null ? 0 : This.longLockPointer();
            int tmp_ret = instance.proxycall70(get_Release(), tmp_0);
            if (This != null) {
                This.unlock();
            }
            return tmp_ret;
        }
        public final void set_GetClipList(long val) {
            byteBase.setAddress(NativeBridge.is64 ? 24 : 12, val);
        }
        public final long get_GetClipList() {
            return byteBase.getAddress(NativeBridge.is64 ? 24 : 12);
        }
        public final int GetClipList(Win32.IDirectDrawClipper This, Win32.RECT param_1, Win32.RGNDATA param_2, Int32Pointer param_3) {
            long tmp_0 = This == null ? 0 : This.longLockPointer();
            long tmp_1 = param_1 == null ? 0 : param_1.longLockPointer();
            long tmp_2 = param_2 == null ? 0 : param_2.longLockPointer();
            long tmp_3 = param_3 == null ? 0 : param_3.longLockPointer();
            int tmp_ret = instance.proxycall71(get_GetClipList(), tmp_0, tmp_1, tmp_2, tmp_3);
            if (This != null) {
                This.unlock();
            }
            if (param_1 != null) {
                param_1.unlock();
            }
            if (param_2 != null) {
                param_2.unlock();
            }
            if (param_3 != null) {
                param_3.unlock();
            }
            return tmp_ret;
        }
        public final void set_GetHWnd(long val) {
            byteBase.setAddress(NativeBridge.is64 ? 32 : 16, val);
        }
        public final long get_GetHWnd() {
            return byteBase.getAddress(NativeBridge.is64 ? 32 : 16);
        }
        public final int GetHWnd(Win32.IDirectDrawClipper This, PointerPointer param_1) {
            long tmp_0 = This == null ? 0 : This.longLockPointer();
            long tmp_1 = param_1 == null ? 0 : param_1.longLockPointer();
            int tmp_ret = instance.proxycall72(get_GetHWnd(), tmp_0, tmp_1);
            if (This != null) {
                This.unlock();
            }
            if (param_1 != null) {
                param_1.unlock();
            }
            return tmp_ret;
        }
        public final void set_Initialize(long val) {
            byteBase.setAddress(NativeBridge.is64 ? 40 : 20, val);
        }
        public final long get_Initialize() {
            return byteBase.getAddress(NativeBridge.is64 ? 40 : 20);
        }
        public final int Initialize(Win32.IDirectDrawClipper This, Win32.IDirectDraw param_1, int param_2) {
            long tmp_0 = This == null ? 0 : This.longLockPointer();
            long tmp_1 = param_1 == null ? 0 : param_1.longLockPointer();
            int tmp_ret = instance.proxycall73(get_Initialize(), tmp_0, tmp_1, param_2);
            if (This != null) {
                This.unlock();
            }
            if (param_1 != null) {
                param_1.unlock();
            }
            return tmp_ret;
        }
        public final void set_IsClipListChanged(long val) {
            byteBase.setAddress(NativeBridge.is64 ? 48 : 24, val);
        }
        public final long get_IsClipListChanged() {
            return byteBase.getAddress(NativeBridge.is64 ? 48 : 24);
        }
        public final int IsClipListChanged(Win32.IDirectDrawClipper This, Int32Pointer param_1) {
            long tmp_0 = This == null ? 0 : This.longLockPointer();
            long tmp_1 = param_1 == null ? 0 : param_1.longLockPointer();
            int tmp_ret = instance.proxycall74(get_IsClipListChanged(), tmp_0, tmp_1);
            if (This != null) {
                This.unlock();
            }
            if (param_1 != null) {
                param_1.unlock();
            }
            return tmp_ret;
        }
        public final void set_SetClipList(long val) {
            byteBase.setAddress(NativeBridge.is64 ? 56 : 28, val);
        }
        public final long get_SetClipList() {
            return byteBase.getAddress(NativeBridge.is64 ? 56 : 28);
        }
        public final int SetClipList(Win32.IDirectDrawClipper This, Win32.RGNDATA param_1, int param_2) {
            long tmp_0 = This == null ? 0 : This.longLockPointer();
            long tmp_1 = param_1 == null ? 0 : param_1.longLockPointer();
            int tmp_ret = instance.proxycall75(get_SetClipList(), tmp_0, tmp_1, param_2);
            if (This != null) {
                This.unlock();
            }
            if (param_1 != null) {
                param_1.unlock();
            }
            return tmp_ret;
        }
        public final void set_SetHWnd(long val) {
            byteBase.setAddress(NativeBridge.is64 ? 64 : 32, val);
        }
        public final long get_SetHWnd() {
            return byteBase.getAddress(NativeBridge.is64 ? 64 : 32);
        }
        public final int SetHWnd(Win32.IDirectDrawClipper This, int param_1, long param_2) {
            long tmp_0 = This == null ? 0 : This.longLockPointer();
            int tmp_ret = instance.proxycall76(get_SetHWnd(), tmp_0, param_1, param_2);
            if (This != null) {
                This.unlock();
            }
            return tmp_ret;
        }
        @Override
        public int size() {
            return sizeof;
        }
    }

    public final IDirectDrawClipperVtbl createIDirectDrawClipperVtbl(boolean direct) {
        return new IDirectDrawClipperVtbl(direct);
    }
    public final IDirectDrawClipperVtbl createIDirectDrawClipperVtbl(VoidPointer base) {
        return new IDirectDrawClipperVtbl(base);
    }
    public final IDirectDrawClipperVtbl createIDirectDrawClipperVtbl(long addr) {
        return new IDirectDrawClipperVtbl(addr);
    }


    public static class DDSCAPS2 extends CommonStructWrapper {

        public static final int sizeof = 16;

        DDSCAPS2(boolean direct) {
            super(sizeof, direct);
        }
        DDSCAPS2(VoidPointer base) {
            super(base);
        }
        DDSCAPS2(long addr) {
            super(addr);
        }
        public final void set_dwCaps(int val) {
            byteBase.setInt32(0, val);
        }
        public final int get_dwCaps() {
            return byteBase.getInt32(0);
        }
        public final void set_dwCaps2(int val) {
            byteBase.setInt32(4, val);
        }
        public final int get_dwCaps2() {
            return byteBase.getInt32(4);
        }
        public final void set_dwCaps3(int val) {
            byteBase.setInt32(8, val);
        }
        public final int get_dwCaps3() {
            return byteBase.getInt32(8);
        }
        public final void set_dwCaps4(int val) {
            byteBase.setInt32(12, val);
        }
        public final int get_dwCaps4() {
            return byteBase.getInt32(12);
        }
        public final void set_dwVolumeDepth(int val) {
            byteBase.setInt32(12, val);
        }
        public final int get_dwVolumeDepth() {
            return byteBase.getInt32(12);
        }
        @Override
        public int size() {
            return sizeof;
        }
    }

    public final DDSCAPS2 createDDSCAPS2(boolean direct) {
        return new DDSCAPS2(direct);
    }
    public final DDSCAPS2 createDDSCAPS2(VoidPointer base) {
        return new DDSCAPS2(base);
    }
    public final DDSCAPS2 createDDSCAPS2(long addr) {
        return new DDSCAPS2(addr);
    }


    public static class DDSURFACEDESC extends CommonStructWrapper {

        public static final int sizeof = NativeBridge.is64 ? 120 : 108;

        DDSURFACEDESC(boolean direct) {
            super(sizeof, direct);
        }
        DDSURFACEDESC(VoidPointer base) {
            super(base);
        }
        DDSURFACEDESC(long addr) {
            super(addr);
        }
        public final void set_dwSize(int val) {
            byteBase.setInt32(0, val);
        }
        public final int get_dwSize() {
            return byteBase.getInt32(0);
        }
        public final void set_dwFlags(int val) {
            byteBase.setInt32(4, val);
        }
        public final int get_dwFlags() {
            return byteBase.getInt32(4);
        }
        public final void set_dwHeight(int val) {
            byteBase.setInt32(8, val);
        }
        public final int get_dwHeight() {
            return byteBase.getInt32(8);
        }
        public final void set_dwWidth(int val) {
            byteBase.setInt32(12, val);
        }
        public final int get_dwWidth() {
            return byteBase.getInt32(12);
        }
        public final void set_lPitch(int val) {
            byteBase.setInt32(16, val);
        }
        public final int get_lPitch() {
            return byteBase.getInt32(16);
        }
        public final void set_dwLinearSize(int val) {
            byteBase.setInt32(16, val);
        }
        public final int get_dwLinearSize() {
            return byteBase.getInt32(16);
        }
        public final void set_dwBackBufferCount(int val) {
            byteBase.setInt32(20, val);
        }
        public final int get_dwBackBufferCount() {
            return byteBase.getInt32(20);
        }
        public final void set_dwMipMapCount(int val) {
            byteBase.setInt32(24, val);
        }
        public final int get_dwMipMapCount() {
            return byteBase.getInt32(24);
        }
        public final void set_dwZBufferBitDepth(int val) {
            byteBase.setInt32(24, val);
        }
        public final int get_dwZBufferBitDepth() {
            return byteBase.getInt32(24);
        }
        public final void set_dwRefreshRate(int val) {
            byteBase.setInt32(24, val);
        }
        public final int get_dwRefreshRate() {
            return byteBase.getInt32(24);
        }
        public final void set_dwAlphaBitDepth(int val) {
            byteBase.setInt32(28, val);
        }
        public final int get_dwAlphaBitDepth() {
            return byteBase.getInt32(28);
        }
        public final void set_dwReserved(int val) {
            byteBase.setInt32(32, val);
        }
        public final int get_dwReserved() {
            return byteBase.getInt32(32);
        }
        public final void set_lpSurface(VoidPointer val) {
            byteBase.setPointer(NativeBridge.is64 ? 40 : 36, val);
        }
        public final VoidPointer get_lpSurface() {
            return nb.createInt8Pointer(byteBase.getAddress(NativeBridge.is64 ? 40 : 36));
        }
        public final DDCOLORKEY get_ddckCKDestOverlay() {
            return instance.createDDCOLORKEY(getElementPointer(NativeBridge.is64 ? 48 : 40));
        }
        public final DDCOLORKEY get_ddckCKDestBlt() {
            return instance.createDDCOLORKEY(getElementPointer(NativeBridge.is64 ? 56 : 48));
        }
        public final DDCOLORKEY get_ddckCKSrcOverlay() {
            return instance.createDDCOLORKEY(getElementPointer(NativeBridge.is64 ? 64 : 56));
        }
        public final DDCOLORKEY get_ddckCKSrcBlt() {
            return instance.createDDCOLORKEY(getElementPointer(NativeBridge.is64 ? 72 : 64));
        }
        public final DDPIXELFORMAT get_ddpfPixelFormat() {
            return instance.createDDPIXELFORMAT(getElementPointer(NativeBridge.is64 ? 80 : 72));
        }
        public final DDSCAPS get_ddsCaps() {
            return instance.createDDSCAPS(getElementPointer(NativeBridge.is64 ? 112 : 104));
        }
        @Override
        public int size() {
            return sizeof;
        }
    }

    public final DDSURFACEDESC createDDSURFACEDESC(boolean direct) {
        return new DDSURFACEDESC(direct);
    }
    public final DDSURFACEDESC createDDSURFACEDESC(VoidPointer base) {
        return new DDSURFACEDESC(base);
    }
    public final DDSURFACEDESC createDDSURFACEDESC(long addr) {
        return new DDSURFACEDESC(addr);
    }


    public static class IDirectDrawSurface extends CommonStructWrapper {

        public static final int sizeof = NativeBridge.is64 ? 8 : 4;

        IDirectDrawSurface(boolean direct) {
            super(sizeof, direct);
        }
        IDirectDrawSurface(VoidPointer base) {
            super(base);
        }
        IDirectDrawSurface(long addr) {
            super(addr);
        }
        public final IDirectDrawSurfaceVtbl get_lpVtbl() {
            return instance.createIDirectDrawSurfaceVtbl(byteBase.getAddress(0));
        }
        @Override
        public int size() {
            return sizeof;
        }
    }

    public final IDirectDrawSurface createIDirectDrawSurface(boolean direct) {
        return new IDirectDrawSurface(direct);
    }
    public final IDirectDrawSurface createIDirectDrawSurface(VoidPointer base) {
        return new IDirectDrawSurface(base);
    }
    public final IDirectDrawSurface createIDirectDrawSurface(long addr) {
        return new IDirectDrawSurface(addr);
    }


    public static class IDirectDrawVtbl extends CommonStructWrapper {

        public static final int sizeof = NativeBridge.is64 ? 184 : 92;

        IDirectDrawVtbl(boolean direct) {
            super(sizeof, direct);
        }
        IDirectDrawVtbl(VoidPointer base) {
            super(base);
        }
        IDirectDrawVtbl(long addr) {
            super(addr);
        }
        public final void set_QueryInterface(long val) {
            byteBase.setAddress(0, val);
        }
        public final long get_QueryInterface() {
            return byteBase.getAddress(0);
        }
        public final int QueryInterface(Win32.IDirectDraw This, Win32.GUID riid, PointerPointer ppvObj) {
            long tmp_0 = This == null ? 0 : This.longLockPointer();
            long tmp_1 = riid == null ? 0 : riid.longLockPointer();
            long tmp_2 = ppvObj == null ? 0 : ppvObj.longLockPointer();
            int tmp_ret = instance.proxycall77(get_QueryInterface(), tmp_0, tmp_1, tmp_2);
            if (This != null) {
                This.unlock();
            }
            if (riid != null) {
                riid.unlock();
            }
            if (ppvObj != null) {
                ppvObj.unlock();
            }
            return tmp_ret;
        }
        public final void set_AddRef(long val) {
            byteBase.setAddress(NativeBridge.is64 ? 8 : 4, val);
        }
        public final long get_AddRef() {
            return byteBase.getAddress(NativeBridge.is64 ? 8 : 4);
        }
        public final int AddRef(Win32.IDirectDraw This) {
            long tmp_0 = This == null ? 0 : This.longLockPointer();
            int tmp_ret = instance.proxycall78(get_AddRef(), tmp_0);
            if (This != null) {
                This.unlock();
            }
            return tmp_ret;
        }
        public final void set_Release(long val) {
            byteBase.setAddress(NativeBridge.is64 ? 16 : 8, val);
        }
        public final long get_Release() {
            return byteBase.getAddress(NativeBridge.is64 ? 16 : 8);
        }
        public final int Release(Win32.IDirectDraw This) {
            long tmp_0 = This == null ? 0 : This.longLockPointer();
            int tmp_ret = instance.proxycall79(get_Release(), tmp_0);
            if (This != null) {
                This.unlock();
            }
            return tmp_ret;
        }
        public final void set_Compact(long val) {
            byteBase.setAddress(NativeBridge.is64 ? 24 : 12, val);
        }
        public final long get_Compact() {
            return byteBase.getAddress(NativeBridge.is64 ? 24 : 12);
        }
        public final int Compact(Win32.IDirectDraw This) {
            long tmp_0 = This == null ? 0 : This.longLockPointer();
            int tmp_ret = instance.proxycall80(get_Compact(), tmp_0);
            if (This != null) {
                This.unlock();
            }
            return tmp_ret;
        }
        public final void set_CreateClipper(long val) {
            byteBase.setAddress(NativeBridge.is64 ? 32 : 16, val);
        }
        public final long get_CreateClipper() {
            return byteBase.getAddress(NativeBridge.is64 ? 32 : 16);
        }
        public final int CreateClipper(Win32.IDirectDraw This, int param_1, PointerPointer param_2, Win32.IUnknown param_3) {
            long tmp_0 = This == null ? 0 : This.longLockPointer();
            long tmp_1 = param_2 == null ? 0 : param_2.longLockPointer();
            long tmp_2 = param_3 == null ? 0 : param_3.longLockPointer();
            int tmp_ret = instance.proxycall81(get_CreateClipper(), tmp_0, param_1, tmp_1, tmp_2);
            if (This != null) {
                This.unlock();
            }
            if (param_2 != null) {
                param_2.unlock();
            }
            if (param_3 != null) {
                param_3.unlock();
            }
            return tmp_ret;
        }
        public final void set_CreatePalette(long val) {
            byteBase.setAddress(NativeBridge.is64 ? 40 : 20, val);
        }
        public final long get_CreatePalette() {
            return byteBase.getAddress(NativeBridge.is64 ? 40 : 20);
        }
        public final int CreatePalette(Win32.IDirectDraw This, int param_1, PALETTEENTRY param_2, PointerPointer param_3, Win32.IUnknown param_4) {
            long tmp_0 = This == null ? 0 : This.longLockPointer();
            long tmp_1 = param_2 == null ? 0 : param_2.longLockPointer();
            long tmp_2 = param_3 == null ? 0 : param_3.longLockPointer();
            long tmp_3 = param_4 == null ? 0 : param_4.longLockPointer();
            int tmp_ret = instance.proxycall82(get_CreatePalette(), tmp_0, param_1, tmp_1, tmp_2, tmp_3);
            if (This != null) {
                This.unlock();
            }
            if (param_2 != null) {
                param_2.unlock();
            }
            if (param_3 != null) {
                param_3.unlock();
            }
            if (param_4 != null) {
                param_4.unlock();
            }
            return tmp_ret;
        }
        public final void set_CreateSurface(long val) {
            byteBase.setAddress(NativeBridge.is64 ? 48 : 24, val);
        }
        public final long get_CreateSurface() {
            return byteBase.getAddress(NativeBridge.is64 ? 48 : 24);
        }
        public final int CreateSurface(Win32.IDirectDraw This, Win32.DDSURFACEDESC param_1, PointerPointer param_2, Win32.IUnknown param_3) {
            long tmp_0 = This == null ? 0 : This.longLockPointer();
            long tmp_1 = param_1 == null ? 0 : param_1.longLockPointer();
            long tmp_2 = param_2 == null ? 0 : param_2.longLockPointer();
            long tmp_3 = param_3 == null ? 0 : param_3.longLockPointer();
            int tmp_ret = instance.proxycall83(get_CreateSurface(), tmp_0, tmp_1, tmp_2, tmp_3);
            if (This != null) {
                This.unlock();
            }
            if (param_1 != null) {
                param_1.unlock();
            }
            if (param_2 != null) {
                param_2.unlock();
            }
            if (param_3 != null) {
                param_3.unlock();
            }
            return tmp_ret;
        }
        public final void set_DuplicateSurface(long val) {
            byteBase.setAddress(NativeBridge.is64 ? 56 : 28, val);
        }
        public final long get_DuplicateSurface() {
            return byteBase.getAddress(NativeBridge.is64 ? 56 : 28);
        }
        public final int DuplicateSurface(Win32.IDirectDraw This, Win32.IDirectDrawSurface param_1, PointerPointer param_2) {
            long tmp_0 = This == null ? 0 : This.longLockPointer();
            long tmp_1 = param_1 == null ? 0 : param_1.longLockPointer();
            long tmp_2 = param_2 == null ? 0 : param_2.longLockPointer();
            int tmp_ret = instance.proxycall84(get_DuplicateSurface(), tmp_0, tmp_1, tmp_2);
            if (This != null) {
                This.unlock();
            }
            if (param_1 != null) {
                param_1.unlock();
            }
            if (param_2 != null) {
                param_2.unlock();
            }
            return tmp_ret;
        }
        public final void set_EnumDisplayModes(long val) {
            byteBase.setAddress(NativeBridge.is64 ? 64 : 32, val);
        }
        public final long get_EnumDisplayModes() {
            return byteBase.getAddress(NativeBridge.is64 ? 64 : 32);
        }
        public final int EnumDisplayModes(Win32.IDirectDraw This, int param_1, Win32.DDSURFACEDESC param_2, VoidPointer param_3, long param_4) {
            long tmp_0 = This == null ? 0 : This.longLockPointer();
            long tmp_1 = param_2 == null ? 0 : param_2.longLockPointer();
            long tmp_2 = param_3 == null ? 0 : param_3.longLockPointer();
            int tmp_ret = instance.proxycall85(get_EnumDisplayModes(), tmp_0, param_1, tmp_1, tmp_2, param_4);
            if (This != null) {
                This.unlock();
            }
            if (param_2 != null) {
                param_2.unlock();
            }
            if (param_3 != null) {
                param_3.unlock();
            }
            return tmp_ret;
        }
        public final void set_EnumSurfaces(long val) {
            byteBase.setAddress(NativeBridge.is64 ? 72 : 36, val);
        }
        public final long get_EnumSurfaces() {
            return byteBase.getAddress(NativeBridge.is64 ? 72 : 36);
        }
        public final int EnumSurfaces(Win32.IDirectDraw This, int param_1, Win32.DDSURFACEDESC param_2, VoidPointer param_3, long param_4) {
            long tmp_0 = This == null ? 0 : This.longLockPointer();
            long tmp_1 = param_2 == null ? 0 : param_2.longLockPointer();
            long tmp_2 = param_3 == null ? 0 : param_3.longLockPointer();
            int tmp_ret = instance.proxycall86(get_EnumSurfaces(), tmp_0, param_1, tmp_1, tmp_2, param_4);
            if (This != null) {
                This.unlock();
            }
            if (param_2 != null) {
                param_2.unlock();
            }
            if (param_3 != null) {
                param_3.unlock();
            }
            return tmp_ret;
        }
        public final void set_FlipToGDISurface(long val) {
            byteBase.setAddress(NativeBridge.is64 ? 80 : 40, val);
        }
        public final long get_FlipToGDISurface() {
            return byteBase.getAddress(NativeBridge.is64 ? 80 : 40);
        }
        public final int FlipToGDISurface(Win32.IDirectDraw This) {
            long tmp_0 = This == null ? 0 : This.longLockPointer();
            int tmp_ret = instance.proxycall87(get_FlipToGDISurface(), tmp_0);
            if (This != null) {
                This.unlock();
            }
            return tmp_ret;
        }
        public final void set_GetCaps(long val) {
            byteBase.setAddress(NativeBridge.is64 ? 88 : 44, val);
        }
        public final long get_GetCaps() {
            return byteBase.getAddress(NativeBridge.is64 ? 88 : 44);
        }
        public final int GetCaps(Win32.IDirectDraw This, DDCAPS_DX7 param_1, DDCAPS_DX7 param_2) {
            long tmp_0 = This == null ? 0 : This.longLockPointer();
            long tmp_1 = param_1 == null ? 0 : param_1.longLockPointer();
            long tmp_2 = param_2 == null ? 0 : param_2.longLockPointer();
            int tmp_ret = instance.proxycall88(get_GetCaps(), tmp_0, tmp_1, tmp_2);
            if (This != null) {
                This.unlock();
            }
            if (param_1 != null) {
                param_1.unlock();
            }
            if (param_2 != null) {
                param_2.unlock();
            }
            return tmp_ret;
        }
        public final void set_GetDisplayMode(long val) {
            byteBase.setAddress(NativeBridge.is64 ? 96 : 48, val);
        }
        public final long get_GetDisplayMode() {
            return byteBase.getAddress(NativeBridge.is64 ? 96 : 48);
        }
        public final int GetDisplayMode(Win32.IDirectDraw This, Win32.DDSURFACEDESC param_1) {
            long tmp_0 = This == null ? 0 : This.longLockPointer();
            long tmp_1 = param_1 == null ? 0 : param_1.longLockPointer();
            int tmp_ret = instance.proxycall89(get_GetDisplayMode(), tmp_0, tmp_1);
            if (This != null) {
                This.unlock();
            }
            if (param_1 != null) {
                param_1.unlock();
            }
            return tmp_ret;
        }
        public final void set_GetFourCCCodes(long val) {
            byteBase.setAddress(NativeBridge.is64 ? 104 : 52, val);
        }
        public final long get_GetFourCCCodes() {
            return byteBase.getAddress(NativeBridge.is64 ? 104 : 52);
        }
        public final int GetFourCCCodes(Win32.IDirectDraw This, Int32Pointer param_1, Int32Pointer param_2) {
            long tmp_0 = This == null ? 0 : This.longLockPointer();
            long tmp_1 = param_1 == null ? 0 : param_1.longLockPointer();
            long tmp_2 = param_2 == null ? 0 : param_2.longLockPointer();
            int tmp_ret = instance.proxycall90(get_GetFourCCCodes(), tmp_0, tmp_1, tmp_2);
            if (This != null) {
                This.unlock();
            }
            if (param_1 != null) {
                param_1.unlock();
            }
            if (param_2 != null) {
                param_2.unlock();
            }
            return tmp_ret;
        }
        public final void set_GetGDISurface(long val) {
            byteBase.setAddress(NativeBridge.is64 ? 112 : 56, val);
        }
        public final long get_GetGDISurface() {
            return byteBase.getAddress(NativeBridge.is64 ? 112 : 56);
        }
        public final int GetGDISurface(Win32.IDirectDraw This, PointerPointer param_1) {
            long tmp_0 = This == null ? 0 : This.longLockPointer();
            long tmp_1 = param_1 == null ? 0 : param_1.longLockPointer();
            int tmp_ret = instance.proxycall91(get_GetGDISurface(), tmp_0, tmp_1);
            if (This != null) {
                This.unlock();
            }
            if (param_1 != null) {
                param_1.unlock();
            }
            return tmp_ret;
        }
        public final void set_GetMonitorFrequency(long val) {
            byteBase.setAddress(NativeBridge.is64 ? 120 : 60, val);
        }
        public final long get_GetMonitorFrequency() {
            return byteBase.getAddress(NativeBridge.is64 ? 120 : 60);
        }
        public final int GetMonitorFrequency(Win32.IDirectDraw This, Int32Pointer param_1) {
            long tmp_0 = This == null ? 0 : This.longLockPointer();
            long tmp_1 = param_1 == null ? 0 : param_1.longLockPointer();
            int tmp_ret = instance.proxycall92(get_GetMonitorFrequency(), tmp_0, tmp_1);
            if (This != null) {
                This.unlock();
            }
            if (param_1 != null) {
                param_1.unlock();
            }
            return tmp_ret;
        }
        public final void set_GetScanLine(long val) {
            byteBase.setAddress(NativeBridge.is64 ? 128 : 64, val);
        }
        public final long get_GetScanLine() {
            return byteBase.getAddress(NativeBridge.is64 ? 128 : 64);
        }
        public final int GetScanLine(Win32.IDirectDraw This, Int32Pointer param_1) {
            long tmp_0 = This == null ? 0 : This.longLockPointer();
            long tmp_1 = param_1 == null ? 0 : param_1.longLockPointer();
            int tmp_ret = instance.proxycall93(get_GetScanLine(), tmp_0, tmp_1);
            if (This != null) {
                This.unlock();
            }
            if (param_1 != null) {
                param_1.unlock();
            }
            return tmp_ret;
        }
        public final void set_GetVerticalBlankStatus(long val) {
            byteBase.setAddress(NativeBridge.is64 ? 136 : 68, val);
        }
        public final long get_GetVerticalBlankStatus() {
            return byteBase.getAddress(NativeBridge.is64 ? 136 : 68);
        }
        public final int GetVerticalBlankStatus(Win32.IDirectDraw This, Int32Pointer param_1) {
            long tmp_0 = This == null ? 0 : This.longLockPointer();
            long tmp_1 = param_1 == null ? 0 : param_1.longLockPointer();
            int tmp_ret = instance.proxycall94(get_GetVerticalBlankStatus(), tmp_0, tmp_1);
            if (This != null) {
                This.unlock();
            }
            if (param_1 != null) {
                param_1.unlock();
            }
            return tmp_ret;
        }
        public final void set_Initialize(long val) {
            byteBase.setAddress(NativeBridge.is64 ? 144 : 72, val);
        }
        public final long get_Initialize() {
            return byteBase.getAddress(NativeBridge.is64 ? 144 : 72);
        }
        public final int Initialize(Win32.IDirectDraw This, Win32.GUID param_1) {
            long tmp_0 = This == null ? 0 : This.longLockPointer();
            long tmp_1 = param_1 == null ? 0 : param_1.longLockPointer();
            int tmp_ret = instance.proxycall95(get_Initialize(), tmp_0, tmp_1);
            if (This != null) {
                This.unlock();
            }
            if (param_1 != null) {
                param_1.unlock();
            }
            return tmp_ret;
        }
        public final void set_RestoreDisplayMode(long val) {
            byteBase.setAddress(NativeBridge.is64 ? 152 : 76, val);
        }
        public final long get_RestoreDisplayMode() {
            return byteBase.getAddress(NativeBridge.is64 ? 152 : 76);
        }
        public final int RestoreDisplayMode(Win32.IDirectDraw This) {
            long tmp_0 = This == null ? 0 : This.longLockPointer();
            int tmp_ret = instance.proxycall96(get_RestoreDisplayMode(), tmp_0);
            if (This != null) {
                This.unlock();
            }
            return tmp_ret;
        }
        public final void set_SetCooperativeLevel(long val) {
            byteBase.setAddress(NativeBridge.is64 ? 160 : 80, val);
        }
        public final long get_SetCooperativeLevel() {
            return byteBase.getAddress(NativeBridge.is64 ? 160 : 80);
        }
        public final int SetCooperativeLevel(Win32.IDirectDraw This, long param_1, int param_2) {
            long tmp_0 = This == null ? 0 : This.longLockPointer();
            int tmp_ret = instance.proxycall97(get_SetCooperativeLevel(), tmp_0, param_1, param_2);
            if (This != null) {
                This.unlock();
            }
            return tmp_ret;
        }
        public final void set_SetDisplayMode(long val) {
            byteBase.setAddress(NativeBridge.is64 ? 168 : 84, val);
        }
        public final long get_SetDisplayMode() {
            return byteBase.getAddress(NativeBridge.is64 ? 168 : 84);
        }
        public final int SetDisplayMode(Win32.IDirectDraw This, int param_1, int param_2, int param_3) {
            long tmp_0 = This == null ? 0 : This.longLockPointer();
            int tmp_ret = instance.proxycall98(get_SetDisplayMode(), tmp_0, param_1, param_2, param_3);
            if (This != null) {
                This.unlock();
            }
            return tmp_ret;
        }
        public final void set_WaitForVerticalBlank(long val) {
            byteBase.setAddress(NativeBridge.is64 ? 176 : 88, val);
        }
        public final long get_WaitForVerticalBlank() {
            return byteBase.getAddress(NativeBridge.is64 ? 176 : 88);
        }
        public final int WaitForVerticalBlank(Win32.IDirectDraw This, int param_1, VoidPointer param_2) {
            long tmp_0 = This == null ? 0 : This.longLockPointer();
            long tmp_1 = param_2 == null ? 0 : param_2.longLockPointer();
            int tmp_ret = instance.proxycall99(get_WaitForVerticalBlank(), tmp_0, param_1, tmp_1);
            if (This != null) {
                This.unlock();
            }
            if (param_2 != null) {
                param_2.unlock();
            }
            return tmp_ret;
        }
        @Override
        public int size() {
            return sizeof;
        }
    }

    public final IDirectDrawVtbl createIDirectDrawVtbl(boolean direct) {
        return new IDirectDrawVtbl(direct);
    }
    public final IDirectDrawVtbl createIDirectDrawVtbl(VoidPointer base) {
        return new IDirectDrawVtbl(base);
    }
    public final IDirectDrawVtbl createIDirectDrawVtbl(long addr) {
        return new IDirectDrawVtbl(addr);
    }


    public static class IEnumIDListVtbl extends CommonStructWrapper {

        public static final int sizeof = NativeBridge.is64 ? 56 : 28;

        IEnumIDListVtbl(boolean direct) {
            super(sizeof, direct);
        }
        IEnumIDListVtbl(VoidPointer base) {
            super(base);
        }
        IEnumIDListVtbl(long addr) {
            super(addr);
        }
        public final void set_QueryInterface(long val) {
            byteBase.setAddress(0, val);
        }
        public final long get_QueryInterface() {
            return byteBase.getAddress(0);
        }
        public final int QueryInterface(Win32.IEnumIDList This, Win32.GUID riid, PointerPointer ppvObject) {
            long tmp_0 = This == null ? 0 : This.longLockPointer();
            long tmp_1 = riid == null ? 0 : riid.longLockPointer();
            long tmp_2 = ppvObject == null ? 0 : ppvObject.longLockPointer();
            int tmp_ret = instance.proxycall100(get_QueryInterface(), tmp_0, tmp_1, tmp_2);
            if (This != null) {
                This.unlock();
            }
            if (riid != null) {
                riid.unlock();
            }
            if (ppvObject != null) {
                ppvObject.unlock();
            }
            return tmp_ret;
        }
        public final void set_AddRef(long val) {
            byteBase.setAddress(NativeBridge.is64 ? 8 : 4, val);
        }
        public final long get_AddRef() {
            return byteBase.getAddress(NativeBridge.is64 ? 8 : 4);
        }
        public final int AddRef(Win32.IEnumIDList This) {
            long tmp_0 = This == null ? 0 : This.longLockPointer();
            int tmp_ret = instance.proxycall101(get_AddRef(), tmp_0);
            if (This != null) {
                This.unlock();
            }
            return tmp_ret;
        }
        public final void set_Release(long val) {
            byteBase.setAddress(NativeBridge.is64 ? 16 : 8, val);
        }
        public final long get_Release() {
            return byteBase.getAddress(NativeBridge.is64 ? 16 : 8);
        }
        public final int Release(Win32.IEnumIDList This) {
            long tmp_0 = This == null ? 0 : This.longLockPointer();
            int tmp_ret = instance.proxycall102(get_Release(), tmp_0);
            if (This != null) {
                This.unlock();
            }
            return tmp_ret;
        }
        public final void set_Next(long val) {
            byteBase.setAddress(NativeBridge.is64 ? 24 : 12, val);
        }
        public final long get_Next() {
            return byteBase.getAddress(NativeBridge.is64 ? 24 : 12);
        }
        public final int Next(Win32.IEnumIDList This, int celt, PointerPointer rgelt, Int32Pointer pceltFetched) {
            long tmp_0 = This == null ? 0 : This.longLockPointer();
            long tmp_1 = rgelt == null ? 0 : rgelt.longLockPointer();
            long tmp_2 = pceltFetched == null ? 0 : pceltFetched.longLockPointer();
            int tmp_ret = instance.proxycall103(get_Next(), tmp_0, celt, tmp_1, tmp_2);
            if (This != null) {
                This.unlock();
            }
            if (rgelt != null) {
                rgelt.unlock();
            }
            if (pceltFetched != null) {
                pceltFetched.unlock();
            }
            return tmp_ret;
        }
        public final void set_Skip(long val) {
            byteBase.setAddress(NativeBridge.is64 ? 32 : 16, val);
        }
        public final long get_Skip() {
            return byteBase.getAddress(NativeBridge.is64 ? 32 : 16);
        }
        public final int Skip(Win32.IEnumIDList This, int celt) {
            long tmp_0 = This == null ? 0 : This.longLockPointer();
            int tmp_ret = instance.proxycall104(get_Skip(), tmp_0, celt);
            if (This != null) {
                This.unlock();
            }
            return tmp_ret;
        }
        public final void set_Reset(long val) {
            byteBase.setAddress(NativeBridge.is64 ? 40 : 20, val);
        }
        public final long get_Reset() {
            return byteBase.getAddress(NativeBridge.is64 ? 40 : 20);
        }
        public final int Reset(Win32.IEnumIDList This) {
            long tmp_0 = This == null ? 0 : This.longLockPointer();
            int tmp_ret = instance.proxycall105(get_Reset(), tmp_0);
            if (This != null) {
                This.unlock();
            }
            return tmp_ret;
        }
        public final void set_Clone(long val) {
            byteBase.setAddress(NativeBridge.is64 ? 48 : 24, val);
        }
        public final long get_Clone() {
            return byteBase.getAddress(NativeBridge.is64 ? 48 : 24);
        }
        public final int Clone(Win32.IEnumIDList This, PointerPointer ppenum) {
            long tmp_0 = This == null ? 0 : This.longLockPointer();
            long tmp_1 = ppenum == null ? 0 : ppenum.longLockPointer();
            int tmp_ret = instance.proxycall106(get_Clone(), tmp_0, tmp_1);
            if (This != null) {
                This.unlock();
            }
            if (ppenum != null) {
                ppenum.unlock();
            }
            return tmp_ret;
        }
        @Override
        public int size() {
            return sizeof;
        }
    }

    public final IEnumIDListVtbl createIEnumIDListVtbl(boolean direct) {
        return new IEnumIDListVtbl(direct);
    }
    public final IEnumIDListVtbl createIEnumIDListVtbl(VoidPointer base) {
        return new IEnumIDListVtbl(base);
    }
    public final IEnumIDListVtbl createIEnumIDListVtbl(long addr) {
        return new IEnumIDListVtbl(addr);
    }


    public static class SIZE extends CommonStructWrapper {

        public static final int sizeof = 8;

        SIZE(boolean direct) {
            super(sizeof, direct);
        }
        SIZE(VoidPointer base) {
            super(base);
        }
        SIZE(long addr) {
            super(addr);
        }
        public final void set_cx(int val) {
            byteBase.setInt32(0, val);
        }
        public final int get_cx() {
            return byteBase.getInt32(0);
        }
        public final void set_cy(int val) {
            byteBase.setInt32(4, val);
        }
        public final int get_cy() {
            return byteBase.getInt32(4);
        }
        @Override
        public int size() {
            return sizeof;
        }
    }

    public final SIZE createSIZE(boolean direct) {
        return new SIZE(direct);
    }
    public final SIZE createSIZE(VoidPointer base) {
        return new SIZE(base);
    }
    public final SIZE createSIZE(long addr) {
        return new SIZE(addr);
    }


    public static class PALETTEENTRY extends CommonStructWrapper {

        public static final int sizeof = 4;

        PALETTEENTRY(boolean direct) {
            super(sizeof, direct);
        }
        PALETTEENTRY(VoidPointer base) {
            super(base);
        }
        PALETTEENTRY(long addr) {
            super(addr);
        }
        public final void set_peRed(byte val) {
            byteBase.set(0, val);
        }
        public final byte get_peRed() {
            return byteBase.get(0);
        }
        public final void set_peGreen(byte val) {
            byteBase.set(1, val);
        }
        public final byte get_peGreen() {
            return byteBase.get(1);
        }
        public final void set_peBlue(byte val) {
            byteBase.set(2, val);
        }
        public final byte get_peBlue() {
            return byteBase.get(2);
        }
        public final void set_peFlags(byte val) {
            byteBase.set(3, val);
        }
        public final byte get_peFlags() {
            return byteBase.get(3);
        }
        @Override
        public int size() {
            return sizeof;
        }
    }

    public final PALETTEENTRY createPALETTEENTRY(boolean direct) {
        return new PALETTEENTRY(direct);
    }
    public final PALETTEENTRY createPALETTEENTRY(VoidPointer base) {
        return new PALETTEENTRY(base);
    }
    public final PALETTEENTRY createPALETTEENTRY(long addr) {
        return new PALETTEENTRY(addr);
    }


    public static class DDCAPS_DX7 extends CommonStructWrapper {

        public static final int sizeof = 240;

        DDCAPS_DX7(boolean direct) {
            super(sizeof, direct);
        }
        DDCAPS_DX7(VoidPointer base) {
            super(base);
        }
        DDCAPS_DX7(long addr) {
            super(addr);
        }
        public final void set_dwSize(int val) {
            byteBase.setInt32(0, val);
        }
        public final int get_dwSize() {
            return byteBase.getInt32(0);
        }
        public final void set_dwCaps(int val) {
            byteBase.setInt32(4, val);
        }
        public final int get_dwCaps() {
            return byteBase.getInt32(4);
        }
        public final void set_dwCaps2(int val) {
            byteBase.setInt32(8, val);
        }
        public final int get_dwCaps2() {
            return byteBase.getInt32(8);
        }
        public final void set_dwCKeyCaps(int val) {
            byteBase.setInt32(12, val);
        }
        public final int get_dwCKeyCaps() {
            return byteBase.getInt32(12);
        }
        public final void set_dwFXCaps(int val) {
            byteBase.setInt32(16, val);
        }
        public final int get_dwFXCaps() {
            return byteBase.getInt32(16);
        }
        public final void set_dwFXAlphaCaps(int val) {
            byteBase.setInt32(20, val);
        }
        public final int get_dwFXAlphaCaps() {
            return byteBase.getInt32(20);
        }
        public final void set_dwPalCaps(int val) {
            byteBase.setInt32(24, val);
        }
        public final int get_dwPalCaps() {
            return byteBase.getInt32(24);
        }
        public final void set_dwSVCaps(int val) {
            byteBase.setInt32(28, val);
        }
        public final int get_dwSVCaps() {
            return byteBase.getInt32(28);
        }
        public final void set_dwAlphaBltConstBitDepths(int val) {
            byteBase.setInt32(32, val);
        }
        public final int get_dwAlphaBltConstBitDepths() {
            return byteBase.getInt32(32);
        }
        public final void set_dwAlphaBltPixelBitDepths(int val) {
            byteBase.setInt32(36, val);
        }
        public final int get_dwAlphaBltPixelBitDepths() {
            return byteBase.getInt32(36);
        }
        public final void set_dwAlphaBltSurfaceBitDepths(int val) {
            byteBase.setInt32(40, val);
        }
        public final int get_dwAlphaBltSurfaceBitDepths() {
            return byteBase.getInt32(40);
        }
        public final void set_dwAlphaOverlayConstBitDepths(int val) {
            byteBase.setInt32(44, val);
        }
        public final int get_dwAlphaOverlayConstBitDepths() {
            return byteBase.getInt32(44);
        }
        public final void set_dwAlphaOverlayPixelBitDepths(int val) {
            byteBase.setInt32(48, val);
        }
        public final int get_dwAlphaOverlayPixelBitDepths() {
            return byteBase.getInt32(48);
        }
        public final void set_dwAlphaOverlaySurfaceBitDepths(int val) {
            byteBase.setInt32(52, val);
        }
        public final int get_dwAlphaOverlaySurfaceBitDepths() {
            return byteBase.getInt32(52);
        }
        public final void set_dwZBufferBitDepths(int val) {
            byteBase.setInt32(56, val);
        }
        public final int get_dwZBufferBitDepths() {
            return byteBase.getInt32(56);
        }
        public final void set_dwVidMemTotal(int val) {
            byteBase.setInt32(60, val);
        }
        public final int get_dwVidMemTotal() {
            return byteBase.getInt32(60);
        }
        public final void set_dwVidMemFree(int val) {
            byteBase.setInt32(64, val);
        }
        public final int get_dwVidMemFree() {
            return byteBase.getInt32(64);
        }
        public final void set_dwMaxVisibleOverlays(int val) {
            byteBase.setInt32(68, val);
        }
        public final int get_dwMaxVisibleOverlays() {
            return byteBase.getInt32(68);
        }
        public final void set_dwCurrVisibleOverlays(int val) {
            byteBase.setInt32(72, val);
        }
        public final int get_dwCurrVisibleOverlays() {
            return byteBase.getInt32(72);
        }
        public final void set_dwNumFourCCCodes(int val) {
            byteBase.setInt32(76, val);
        }
        public final int get_dwNumFourCCCodes() {
            return byteBase.getInt32(76);
        }
        public final void set_dwAlignBoundarySrc(int val) {
            byteBase.setInt32(80, val);
        }
        public final int get_dwAlignBoundarySrc() {
            return byteBase.getInt32(80);
        }
        public final void set_dwAlignSizeSrc(int val) {
            byteBase.setInt32(84, val);
        }
        public final int get_dwAlignSizeSrc() {
            return byteBase.getInt32(84);
        }
        public final void set_dwAlignBoundaryDest(int val) {
            byteBase.setInt32(88, val);
        }
        public final int get_dwAlignBoundaryDest() {
            return byteBase.getInt32(88);
        }
        public final void set_dwAlignSizeDest(int val) {
            byteBase.setInt32(92, val);
        }
        public final int get_dwAlignSizeDest() {
            return byteBase.getInt32(92);
        }
        public final void set_dwAlignStrideAlign(int val) {
            byteBase.setInt32(96, val);
        }
        public final int get_dwAlignStrideAlign() {
            return byteBase.getInt32(96);
        }
        public final Int32Pointer get_dwRops() {
            return nb.createInt32Pointer(getElementPointer(100));
        }
        public final DDSCAPS get_ddsOldCaps() {
            return instance.createDDSCAPS(getElementPointer(104));
        }
        public final void set_dwMinOverlayStretch(int val) {
            byteBase.setInt32(108, val);
        }
        public final int get_dwMinOverlayStretch() {
            return byteBase.getInt32(108);
        }
        public final void set_dwMaxOverlayStretch(int val) {
            byteBase.setInt32(112, val);
        }
        public final int get_dwMaxOverlayStretch() {
            return byteBase.getInt32(112);
        }
        public final void set_dwMinLiveVideoStretch(int val) {
            byteBase.setInt32(116, val);
        }
        public final int get_dwMinLiveVideoStretch() {
            return byteBase.getInt32(116);
        }
        public final void set_dwMaxLiveVideoStretch(int val) {
            byteBase.setInt32(120, val);
        }
        public final int get_dwMaxLiveVideoStretch() {
            return byteBase.getInt32(120);
        }
        public final void set_dwMinHwCodecStretch(int val) {
            byteBase.setInt32(124, val);
        }
        public final int get_dwMinHwCodecStretch() {
            return byteBase.getInt32(124);
        }
        public final void set_dwMaxHwCodecStretch(int val) {
            byteBase.setInt32(128, val);
        }
        public final int get_dwMaxHwCodecStretch() {
            return byteBase.getInt32(128);
        }
        public final void set_dwReserved1(int val) {
            byteBase.setInt32(132, val);
        }
        public final int get_dwReserved1() {
            return byteBase.getInt32(132);
        }
        public final void set_dwReserved2(int val) {
            byteBase.setInt32(136, val);
        }
        public final int get_dwReserved2() {
            return byteBase.getInt32(136);
        }
        public final void set_dwReserved3(int val) {
            byteBase.setInt32(140, val);
        }
        public final int get_dwReserved3() {
            return byteBase.getInt32(140);
        }
        public final void set_dwSVBCaps(int val) {
            byteBase.setInt32(144, val);
        }
        public final int get_dwSVBCaps() {
            return byteBase.getInt32(144);
        }
        public final void set_dwSVBCKeyCaps(int val) {
            byteBase.setInt32(148, val);
        }
        public final int get_dwSVBCKeyCaps() {
            return byteBase.getInt32(148);
        }
        public final void set_dwSVBFXCaps(int val) {
            byteBase.setInt32(152, val);
        }
        public final int get_dwSVBFXCaps() {
            return byteBase.getInt32(152);
        }
        public final Int32Pointer get_dwSVBRops() {
            return nb.createInt32Pointer(getElementPointer(156));
        }
        public final void set_dwVSBCaps(int val) {
            byteBase.setInt32(160, val);
        }
        public final int get_dwVSBCaps() {
            return byteBase.getInt32(160);
        }
        public final void set_dwVSBCKeyCaps(int val) {
            byteBase.setInt32(164, val);
        }
        public final int get_dwVSBCKeyCaps() {
            return byteBase.getInt32(164);
        }
        public final void set_dwVSBFXCaps(int val) {
            byteBase.setInt32(168, val);
        }
        public final int get_dwVSBFXCaps() {
            return byteBase.getInt32(168);
        }
        public final Int32Pointer get_dwVSBRops() {
            return nb.createInt32Pointer(getElementPointer(172));
        }
        public final void set_dwSSBCaps(int val) {
            byteBase.setInt32(176, val);
        }
        public final int get_dwSSBCaps() {
            return byteBase.getInt32(176);
        }
        public final void set_dwSSBCKeyCaps(int val) {
            byteBase.setInt32(180, val);
        }
        public final int get_dwSSBCKeyCaps() {
            return byteBase.getInt32(180);
        }
        public final void set_dwSSBFXCaps(int val) {
            byteBase.setInt32(184, val);
        }
        public final int get_dwSSBFXCaps() {
            return byteBase.getInt32(184);
        }
        public final Int32Pointer get_dwSSBRops() {
            return nb.createInt32Pointer(getElementPointer(188));
        }
        public final void set_dwMaxVideoPorts(int val) {
            byteBase.setInt32(192, val);
        }
        public final int get_dwMaxVideoPorts() {
            return byteBase.getInt32(192);
        }
        public final void set_dwCurrVideoPorts(int val) {
            byteBase.setInt32(196, val);
        }
        public final int get_dwCurrVideoPorts() {
            return byteBase.getInt32(196);
        }
        public final void set_dwSVBCaps2(int val) {
            byteBase.setInt32(200, val);
        }
        public final int get_dwSVBCaps2() {
            return byteBase.getInt32(200);
        }
        public final void set_dwNLVBCaps(int val) {
            byteBase.setInt32(204, val);
        }
        public final int get_dwNLVBCaps() {
            return byteBase.getInt32(204);
        }
        public final void set_dwNLVBCaps2(int val) {
            byteBase.setInt32(208, val);
        }
        public final int get_dwNLVBCaps2() {
            return byteBase.getInt32(208);
        }
        public final void set_dwNLVBCKeyCaps(int val) {
            byteBase.setInt32(212, val);
        }
        public final int get_dwNLVBCKeyCaps() {
            return byteBase.getInt32(212);
        }
        public final void set_dwNLVBFXCaps(int val) {
            byteBase.setInt32(216, val);
        }
        public final int get_dwNLVBFXCaps() {
            return byteBase.getInt32(216);
        }
        public final Int32Pointer get_dwNLVBRops() {
            return nb.createInt32Pointer(getElementPointer(220));
        }
        public final Win32.DDSCAPS2 get_ddsCaps() {
            return Win32.instance.createDDSCAPS2(getElementPointer(224));
        }
        @Override
        public int size() {
            return sizeof;
        }
    }

    public final DDCAPS_DX7 createDDCAPS_DX7(boolean direct) {
        return new DDCAPS_DX7(direct);
    }
    public final DDCAPS_DX7 createDDCAPS_DX7(VoidPointer base) {
        return new DDCAPS_DX7(base);
    }
    public final DDCAPS_DX7 createDDCAPS_DX7(long addr) {
        return new DDCAPS_DX7(addr);
    }


    public static class DDSURFACEDESC2 extends CommonStructWrapper {

        public static final int sizeof = NativeBridge.is64 ? 136 : 124;

        DDSURFACEDESC2(boolean direct) {
            super(sizeof, direct);
        }
        DDSURFACEDESC2(VoidPointer base) {
            super(base);
        }
        DDSURFACEDESC2(long addr) {
            super(addr);
        }
        public final void set_dwSize(int val) {
            byteBase.setInt32(0, val);
        }
        public final int get_dwSize() {
            return byteBase.getInt32(0);
        }
        public final void set_dwFlags(int val) {
            byteBase.setInt32(4, val);
        }
        public final int get_dwFlags() {
            return byteBase.getInt32(4);
        }
        public final void set_dwHeight(int val) {
            byteBase.setInt32(8, val);
        }
        public final int get_dwHeight() {
            return byteBase.getInt32(8);
        }
        public final void set_dwWidth(int val) {
            byteBase.setInt32(12, val);
        }
        public final int get_dwWidth() {
            return byteBase.getInt32(12);
        }
        public final void set_lPitch(int val) {
            byteBase.setInt32(16, val);
        }
        public final int get_lPitch() {
            return byteBase.getInt32(16);
        }
        public final void set_dwLinearSize(int val) {
            byteBase.setInt32(16, val);
        }
        public final int get_dwLinearSize() {
            return byteBase.getInt32(16);
        }
        public final void set_dwBackBufferCount(int val) {
            byteBase.setInt32(20, val);
        }
        public final int get_dwBackBufferCount() {
            return byteBase.getInt32(20);
        }
        public final void set_dwDepth(int val) {
            byteBase.setInt32(20, val);
        }
        public final int get_dwDepth() {
            return byteBase.getInt32(20);
        }
        public final void set_dwMipMapCount(int val) {
            byteBase.setInt32(24, val);
        }
        public final int get_dwMipMapCount() {
            return byteBase.getInt32(24);
        }
        public final void set_dwRefreshRate(int val) {
            byteBase.setInt32(24, val);
        }
        public final int get_dwRefreshRate() {
            return byteBase.getInt32(24);
        }
        public final void set_dwSrcVBHandle(int val) {
            byteBase.setInt32(24, val);
        }
        public final int get_dwSrcVBHandle() {
            return byteBase.getInt32(24);
        }
        public final void set_dwAlphaBitDepth(int val) {
            byteBase.setInt32(28, val);
        }
        public final int get_dwAlphaBitDepth() {
            return byteBase.getInt32(28);
        }
        public final void set_dwReserved(int val) {
            byteBase.setInt32(32, val);
        }
        public final int get_dwReserved() {
            return byteBase.getInt32(32);
        }
        public final void set_lpSurface(VoidPointer val) {
            byteBase.setPointer(NativeBridge.is64 ? 40 : 36, val);
        }
        public final VoidPointer get_lpSurface() {
            return nb.createInt8Pointer(byteBase.getAddress(NativeBridge.is64 ? 40 : 36));
        }
        public final DDCOLORKEY get_ddckCKDestOverlay() {
            return instance.createDDCOLORKEY(getElementPointer(NativeBridge.is64 ? 48 : 40));
        }
        public final void set_dwEmptyFaceColor(int val) {
            byteBase.setInt32(NativeBridge.is64 ? 48 : 40, val);
        }
        public final int get_dwEmptyFaceColor() {
            return byteBase.getInt32(NativeBridge.is64 ? 48 : 40);
        }
        public final DDCOLORKEY get_ddckCKDestBlt() {
            return instance.createDDCOLORKEY(getElementPointer(NativeBridge.is64 ? 56 : 48));
        }
        public final DDCOLORKEY get_ddckCKSrcOverlay() {
            return instance.createDDCOLORKEY(getElementPointer(NativeBridge.is64 ? 64 : 56));
        }
        public final DDCOLORKEY get_ddckCKSrcBlt() {
            return instance.createDDCOLORKEY(getElementPointer(NativeBridge.is64 ? 72 : 64));
        }
        public final DDPIXELFORMAT get_ddpfPixelFormat() {
            return instance.createDDPIXELFORMAT(getElementPointer(NativeBridge.is64 ? 80 : 72));
        }
        public final void set_dwFVF(int val) {
            byteBase.setInt32(NativeBridge.is64 ? 80 : 72, val);
        }
        public final int get_dwFVF() {
            return byteBase.getInt32(NativeBridge.is64 ? 80 : 72);
        }
        public final Win32.DDSCAPS2 get_ddsCaps() {
            return Win32.instance.createDDSCAPS2(getElementPointer(NativeBridge.is64 ? 112 : 104));
        }
        public final void set_dwTextureStage(int val) {
            byteBase.setInt32(NativeBridge.is64 ? 128 : 120, val);
        }
        public final int get_dwTextureStage() {
            return byteBase.getInt32(NativeBridge.is64 ? 128 : 120);
        }
        @Override
        public int size() {
            return sizeof;
        }
    }

    public final DDSURFACEDESC2 createDDSURFACEDESC2(boolean direct) {
        return new DDSURFACEDESC2(direct);
    }
    public final DDSURFACEDESC2 createDDSURFACEDESC2(VoidPointer base) {
        return new DDSURFACEDESC2(base);
    }
    public final DDSURFACEDESC2 createDDSURFACEDESC2(long addr) {
        return new DDSURFACEDESC2(addr);
    }


    public static class IDirectDrawSurface7 extends CommonStructWrapper {

        public static final int sizeof = NativeBridge.is64 ? 8 : 4;

        IDirectDrawSurface7Vtbl vtbl;
        IDirectDrawSurface7(long addr) {
            super(addr);
            vtbl = get_lpVtbl();
        }
        public final IDirectDrawSurface7Vtbl get_lpVtbl() {
            return instance.createIDirectDrawSurface7Vtbl(byteBase.getAddress(0));
        }
        public final int QueryInterface(Win32.GUID riid, PointerPointer ppvObj) {
            return vtbl.QueryInterface(this, riid, ppvObj);
        }
        public final int AddRef() {
            return vtbl.AddRef(this);
        }
        public final int Release() {
            return vtbl.Release(this);
        }
        public final int AddAttachedSurface(IDirectDrawSurface7 param_1) {
            return vtbl.AddAttachedSurface(this, param_1);
        }
        public final int AddOverlayDirtyRect(Win32.RECT param_1) {
            return vtbl.AddOverlayDirtyRect(this, param_1);
        }
        public final int Blt(Win32.RECT param_1, IDirectDrawSurface7 param_2, Win32.RECT param_3, int param_4, DDBLTFX param_5) {
            return vtbl.Blt(this, param_1, param_2, param_3, param_4, param_5);
        }
        public final int BltBatch(DDBLTBATCH param_1, int param_2, int param_3) {
            return vtbl.BltBatch(this, param_1, param_2, param_3);
        }
        public final int BltFast(int param_1, int param_2, IDirectDrawSurface7 param_3, Win32.RECT param_4, int param_5) {
            return vtbl.BltFast(this, param_1, param_2, param_3, param_4, param_5);
        }
        public final int DeleteAttachedSurface(int param_1, IDirectDrawSurface7 param_2) {
            return vtbl.DeleteAttachedSurface(this, param_1, param_2);
        }
        public final int EnumAttachedSurfaces(VoidPointer param_1, long param_2) {
            return vtbl.EnumAttachedSurfaces(this, param_1, param_2);
        }
        public final int EnumOverlayZOrders(int param_1, VoidPointer param_2, long param_3) {
            return vtbl.EnumOverlayZOrders(this, param_1, param_2, param_3);
        }
        public final int Flip(IDirectDrawSurface7 param_1, int param_2) {
            return vtbl.Flip(this, param_1, param_2);
        }
        public final int GetAttachedSurface(Win32.DDSCAPS2 param_1, PointerPointer param_2) {
            return vtbl.GetAttachedSurface(this, param_1, param_2);
        }
        public final int GetBltStatus(int param_1) {
            return vtbl.GetBltStatus(this, param_1);
        }
        public final int GetCaps(Win32.DDSCAPS2 param_1) {
            return vtbl.GetCaps(this, param_1);
        }
        public final int GetClipper(PointerPointer param_1) {
            return vtbl.GetClipper(this, param_1);
        }
        public final int GetColorKey(int param_1, DDCOLORKEY param_2) {
            return vtbl.GetColorKey(this, param_1, param_2);
        }
        public final int GetDC(PointerPointer param_1) {
            return vtbl.GetDC(this, param_1);
        }
        public final int GetFlipStatus(int param_1) {
            return vtbl.GetFlipStatus(this, param_1);
        }
        public final int GetOverlayPosition(Int32Pointer param_1, Int32Pointer param_2) {
            return vtbl.GetOverlayPosition(this, param_1, param_2);
        }
        public final int GetPalette(PointerPointer param_1) {
            return vtbl.GetPalette(this, param_1);
        }
        public final int GetPixelFormat(DDPIXELFORMAT param_1) {
            return vtbl.GetPixelFormat(this, param_1);
        }
        public final int GetSurfaceDesc(Win32.DDSURFACEDESC2 param_1) {
            return vtbl.GetSurfaceDesc(this, param_1);
        }
        public final int Initialize(Win32.IDirectDraw param_1, Win32.DDSURFACEDESC2 param_2) {
            return vtbl.Initialize(this, param_1, param_2);
        }
        public final int IsLost() {
            return vtbl.IsLost(this);
        }
        public final int Lock(Win32.RECT param_1, Win32.DDSURFACEDESC2 param_2, int param_3, VoidPointer param_4) {
            return vtbl.Lock(this, param_1, param_2, param_3, param_4);
        }
        public final int ReleaseDC(long param_1) {
            return vtbl.ReleaseDC(this, param_1);
        }
        public final int Restore() {
            return vtbl.Restore(this);
        }
        public final int SetClipper(Win32.IDirectDrawClipper param_1) {
            return vtbl.SetClipper(this, param_1);
        }
        public final int SetColorKey(int param_1, DDCOLORKEY param_2) {
            return vtbl.SetColorKey(this, param_1, param_2);
        }
        public final int SetOverlayPosition(int param_1, int param_2) {
            return vtbl.SetOverlayPosition(this, param_1, param_2);
        }
        public final int SetPalette(Win32.IDirectDrawPalette param_1) {
            return vtbl.SetPalette(this, param_1);
        }
        public final int Unlock(Win32.RECT param_1) {
            return vtbl.Unlock(this, param_1);
        }
        public final int UpdateOverlay(Win32.RECT param_1, IDirectDrawSurface7 param_2, Win32.RECT param_3, int param_4, DDOVERLAYFX param_5) {
            return vtbl.UpdateOverlay(this, param_1, param_2, param_3, param_4, param_5);
        }
        public final int UpdateOverlayDisplay(int param_1) {
            return vtbl.UpdateOverlayDisplay(this, param_1);
        }
        public final int UpdateOverlayZOrder(int param_1, IDirectDrawSurface7 param_2) {
            return vtbl.UpdateOverlayZOrder(this, param_1, param_2);
        }
        public final int GetDDInterface(PointerPointer param_1) {
            return vtbl.GetDDInterface(this, param_1);
        }
        public final int PageLock(int param_1) {
            return vtbl.PageLock(this, param_1);
        }
        public final int PageUnlock(int param_1) {
            return vtbl.PageUnlock(this, param_1);
        }
        public final int SetSurfaceDesc(Win32.DDSURFACEDESC2 param_1, int param_2) {
            return vtbl.SetSurfaceDesc(this, param_1, param_2);
        }
        public final int SetPrivateData(Win32.GUID param_1, VoidPointer param_2, int param_3, int param_4) {
            return vtbl.SetPrivateData(this, param_1, param_2, param_3, param_4);
        }
        public final int GetPrivateData(Win32.GUID param_1, VoidPointer param_2, Int32Pointer param_3) {
            return vtbl.GetPrivateData(this, param_1, param_2, param_3);
        }
        public final int FreePrivateData(Win32.GUID param_1) {
            return vtbl.FreePrivateData(this, param_1);
        }
        public final int GetUniquenessValue(Int32Pointer param_1) {
            return vtbl.GetUniquenessValue(this, param_1);
        }
        public final int ChangeUniquenessValue() {
            return vtbl.ChangeUniquenessValue(this);
        }
        public final int SetPriority(int param_1) {
            return vtbl.SetPriority(this, param_1);
        }
        public final int GetPriority(Int32Pointer param_1) {
            return vtbl.GetPriority(this, param_1);
        }
        public final int SetLOD(int param_1) {
            return vtbl.SetLOD(this, param_1);
        }
        public final int GetLOD(Int32Pointer param_1) {
            return vtbl.GetLOD(this, param_1);
        }
        @Override
        public int size() {
            return sizeof;
        }
    }

    public final IDirectDrawSurface7 createIDirectDrawSurface7(long addr) {
        return new IDirectDrawSurface7(addr);
    }


    public static class DDDEVICEIDENTIFIER2 extends CommonStructWrapper {

        public static final int sizeof = 1072;

        DDDEVICEIDENTIFIER2(boolean direct) {
            super(sizeof, direct);
        }
        DDDEVICEIDENTIFIER2(VoidPointer base) {
            super(base);
        }
        DDDEVICEIDENTIFIER2(long addr) {
            super(addr);
        }
        public final Int8Pointer get_szDriver() {
            return nb.createInt8Pointer(getElementPointer(0));
        }
        public final Int8Pointer get_szDescription() {
            return nb.createInt8Pointer(getElementPointer(512));
        }
        public final LARGE_INTEGER get_liDriverVersion() {
            return instance.createLARGE_INTEGER(getElementPointer(1024));
        }
        public final void set_dwVendorId(int val) {
            byteBase.setInt32(1032, val);
        }
        public final int get_dwVendorId() {
            return byteBase.getInt32(1032);
        }
        public final void set_dwDeviceId(int val) {
            byteBase.setInt32(1036, val);
        }
        public final int get_dwDeviceId() {
            return byteBase.getInt32(1036);
        }
        public final void set_dwSubSysId(int val) {
            byteBase.setInt32(1040, val);
        }
        public final int get_dwSubSysId() {
            return byteBase.getInt32(1040);
        }
        public final void set_dwRevision(int val) {
            byteBase.setInt32(1044, val);
        }
        public final int get_dwRevision() {
            return byteBase.getInt32(1044);
        }
        public final Win32.GUID get_guidDeviceIdentifier() {
            return Win32.instance.createGUID(getElementPointer(1048));
        }
        public final void set_dwWHQLLevel(int val) {
            byteBase.setInt32(1064, val);
        }
        public final int get_dwWHQLLevel() {
            return byteBase.getInt32(1064);
        }
        @Override
        public int size() {
            return sizeof;
        }
    }

    public final DDDEVICEIDENTIFIER2 createDDDEVICEIDENTIFIER2(boolean direct) {
        return new DDDEVICEIDENTIFIER2(direct);
    }
    public final DDDEVICEIDENTIFIER2 createDDDEVICEIDENTIFIER2(VoidPointer base) {
        return new DDDEVICEIDENTIFIER2(base);
    }
    public final DDDEVICEIDENTIFIER2 createDDDEVICEIDENTIFIER2(long addr) {
        return new DDDEVICEIDENTIFIER2(addr);
    }


    public static class DDOVERLAYFX extends CommonStructWrapper {

        public static final int sizeof = NativeBridge.is64 ? 72 : 56;

        DDOVERLAYFX(boolean direct) {
            super(sizeof, direct);
        }
        DDOVERLAYFX(VoidPointer base) {
            super(base);
        }
        DDOVERLAYFX(long addr) {
            super(addr);
        }
        public final void set_dwSize(int val) {
            byteBase.setInt32(0, val);
        }
        public final int get_dwSize() {
            return byteBase.getInt32(0);
        }
        public final void set_dwAlphaEdgeBlendBitDepth(int val) {
            byteBase.setInt32(4, val);
        }
        public final int get_dwAlphaEdgeBlendBitDepth() {
            return byteBase.getInt32(4);
        }
        public final void set_dwAlphaEdgeBlend(int val) {
            byteBase.setInt32(8, val);
        }
        public final int get_dwAlphaEdgeBlend() {
            return byteBase.getInt32(8);
        }
        public final void set_dwReserved(int val) {
            byteBase.setInt32(12, val);
        }
        public final int get_dwReserved() {
            return byteBase.getInt32(12);
        }
        public final void set_dwAlphaDestConstBitDepth(int val) {
            byteBase.setInt32(16, val);
        }
        public final int get_dwAlphaDestConstBitDepth() {
            return byteBase.getInt32(16);
        }
        public final void set_dwAlphaDestConst(int val) {
            byteBase.setInt32(NativeBridge.is64 ? 24 : 20, val);
        }
        public final int get_dwAlphaDestConst() {
            return byteBase.getInt32(NativeBridge.is64 ? 24 : 20);
        }
        public final Win32.IDirectDrawSurface get_lpDDSAlphaDest() {
            return Win32.instance.createIDirectDrawSurface(byteBase.getAddress(NativeBridge.is64 ? 24 : 20));
        }
        public final void set_dwAlphaSrcConstBitDepth(int val) {
            byteBase.setInt32(NativeBridge.is64 ? 32 : 24, val);
        }
        public final int get_dwAlphaSrcConstBitDepth() {
            return byteBase.getInt32(NativeBridge.is64 ? 32 : 24);
        }
        public final void set_dwAlphaSrcConst(int val) {
            byteBase.setInt32(NativeBridge.is64 ? 40 : 28, val);
        }
        public final int get_dwAlphaSrcConst() {
            return byteBase.getInt32(NativeBridge.is64 ? 40 : 28);
        }
        public final Win32.IDirectDrawSurface get_lpDDSAlphaSrc() {
            return Win32.instance.createIDirectDrawSurface(byteBase.getAddress(NativeBridge.is64 ? 40 : 28));
        }
        public final DDCOLORKEY get_dckDestColorkey() {
            return instance.createDDCOLORKEY(getElementPointer(NativeBridge.is64 ? 48 : 32));
        }
        public final DDCOLORKEY get_dckSrcColorkey() {
            return instance.createDDCOLORKEY(getElementPointer(NativeBridge.is64 ? 56 : 40));
        }
        public final void set_dwDDFX(int val) {
            byteBase.setInt32(NativeBridge.is64 ? 64 : 48, val);
        }
        public final int get_dwDDFX() {
            return byteBase.getInt32(NativeBridge.is64 ? 64 : 48);
        }
        public final void set_dwFlags(int val) {
            byteBase.setInt32(NativeBridge.is64 ? 68 : 52, val);
        }
        public final int get_dwFlags() {
            return byteBase.getInt32(NativeBridge.is64 ? 68 : 52);
        }
        @Override
        public int size() {
            return sizeof;
        }
    }

    public final DDOVERLAYFX createDDOVERLAYFX(boolean direct) {
        return new DDOVERLAYFX(direct);
    }
    public final DDOVERLAYFX createDDOVERLAYFX(VoidPointer base) {
        return new DDOVERLAYFX(base);
    }
    public final DDOVERLAYFX createDDOVERLAYFX(long addr) {
        return new DDOVERLAYFX(addr);
    }


    public static class DDBLTFX extends CommonStructWrapper {

        public static final int sizeof = NativeBridge.is64 ? 128 : 100;

        DDBLTFX(boolean direct) {
            super(sizeof, direct);
        }
        DDBLTFX(VoidPointer base) {
            super(base);
        }
        DDBLTFX(long addr) {
            super(addr);
        }
        public final void set_dwSize(int val) {
            byteBase.setInt32(0, val);
        }
        public final int get_dwSize() {
            return byteBase.getInt32(0);
        }
        public final void set_dwDDFX(int val) {
            byteBase.setInt32(4, val);
        }
        public final int get_dwDDFX() {
            return byteBase.getInt32(4);
        }
        public final void set_dwROP(int val) {
            byteBase.setInt32(8, val);
        }
        public final int get_dwROP() {
            return byteBase.getInt32(8);
        }
        public final void set_dwDDROP(int val) {
            byteBase.setInt32(12, val);
        }
        public final int get_dwDDROP() {
            return byteBase.getInt32(12);
        }
        public final void set_dwRotationAngle(int val) {
            byteBase.setInt32(16, val);
        }
        public final int get_dwRotationAngle() {
            return byteBase.getInt32(16);
        }
        public final void set_dwZBufferOpCode(int val) {
            byteBase.setInt32(20, val);
        }
        public final int get_dwZBufferOpCode() {
            return byteBase.getInt32(20);
        }
        public final void set_dwZBufferLow(int val) {
            byteBase.setInt32(24, val);
        }
        public final int get_dwZBufferLow() {
            return byteBase.getInt32(24);
        }
        public final void set_dwZBufferHigh(int val) {
            byteBase.setInt32(28, val);
        }
        public final int get_dwZBufferHigh() {
            return byteBase.getInt32(28);
        }
        public final void set_dwZBufferBaseDest(int val) {
            byteBase.setInt32(32, val);
        }
        public final int get_dwZBufferBaseDest() {
            return byteBase.getInt32(32);
        }
        public final void set_dwZDestConstBitDepth(int val) {
            byteBase.setInt32(36, val);
        }
        public final int get_dwZDestConstBitDepth() {
            return byteBase.getInt32(36);
        }
        public final void set_dwZDestConst(int val) {
            byteBase.setInt32(40, val);
        }
        public final int get_dwZDestConst() {
            return byteBase.getInt32(40);
        }
        public final Win32.IDirectDrawSurface get_lpDDSZBufferDest() {
            return Win32.instance.createIDirectDrawSurface(byteBase.getAddress(40));
        }
        public final void set_dwZSrcConstBitDepth(int val) {
            byteBase.setInt32(NativeBridge.is64 ? 48 : 44, val);
        }
        public final int get_dwZSrcConstBitDepth() {
            return byteBase.getInt32(NativeBridge.is64 ? 48 : 44);
        }
        public final void set_dwZSrcConst(int val) {
            byteBase.setInt32(NativeBridge.is64 ? 56 : 48, val);
        }
        public final int get_dwZSrcConst() {
            return byteBase.getInt32(NativeBridge.is64 ? 56 : 48);
        }
        public final Win32.IDirectDrawSurface get_lpDDSZBufferSrc() {
            return Win32.instance.createIDirectDrawSurface(byteBase.getAddress(NativeBridge.is64 ? 56 : 48));
        }
        public final void set_dwAlphaEdgeBlendBitDepth(int val) {
            byteBase.setInt32(NativeBridge.is64 ? 64 : 52, val);
        }
        public final int get_dwAlphaEdgeBlendBitDepth() {
            return byteBase.getInt32(NativeBridge.is64 ? 64 : 52);
        }
        public final void set_dwAlphaEdgeBlend(int val) {
            byteBase.setInt32(NativeBridge.is64 ? 68 : 56, val);
        }
        public final int get_dwAlphaEdgeBlend() {
            return byteBase.getInt32(NativeBridge.is64 ? 68 : 56);
        }
        public final void set_dwReserved(int val) {
            byteBase.setInt32(NativeBridge.is64 ? 72 : 60, val);
        }
        public final int get_dwReserved() {
            return byteBase.getInt32(NativeBridge.is64 ? 72 : 60);
        }
        public final void set_dwAlphaDestConstBitDepth(int val) {
            byteBase.setInt32(NativeBridge.is64 ? 76 : 64, val);
        }
        public final int get_dwAlphaDestConstBitDepth() {
            return byteBase.getInt32(NativeBridge.is64 ? 76 : 64);
        }
        public final void set_dwAlphaDestConst(int val) {
            byteBase.setInt32(NativeBridge.is64 ? 80 : 68, val);
        }
        public final int get_dwAlphaDestConst() {
            return byteBase.getInt32(NativeBridge.is64 ? 80 : 68);
        }
        public final Win32.IDirectDrawSurface get_lpDDSAlphaDest() {
            return Win32.instance.createIDirectDrawSurface(byteBase.getAddress(NativeBridge.is64 ? 80 : 68));
        }
        public final void set_dwAlphaSrcConstBitDepth(int val) {
            byteBase.setInt32(NativeBridge.is64 ? 88 : 72, val);
        }
        public final int get_dwAlphaSrcConstBitDepth() {
            return byteBase.getInt32(NativeBridge.is64 ? 88 : 72);
        }
        public final void set_dwAlphaSrcConst(int val) {
            byteBase.setInt32(NativeBridge.is64 ? 96 : 76, val);
        }
        public final int get_dwAlphaSrcConst() {
            return byteBase.getInt32(NativeBridge.is64 ? 96 : 76);
        }
        public final Win32.IDirectDrawSurface get_lpDDSAlphaSrc() {
            return Win32.instance.createIDirectDrawSurface(byteBase.getAddress(NativeBridge.is64 ? 96 : 76));
        }
        public final void set_dwFillColor(int val) {
            byteBase.setInt32(NativeBridge.is64 ? 104 : 80, val);
        }
        public final int get_dwFillColor() {
            return byteBase.getInt32(NativeBridge.is64 ? 104 : 80);
        }
        public final void set_dwFillDepth(int val) {
            byteBase.setInt32(NativeBridge.is64 ? 104 : 80, val);
        }
        public final int get_dwFillDepth() {
            return byteBase.getInt32(NativeBridge.is64 ? 104 : 80);
        }
        public final void set_dwFillPixel(int val) {
            byteBase.setInt32(NativeBridge.is64 ? 104 : 80, val);
        }
        public final int get_dwFillPixel() {
            return byteBase.getInt32(NativeBridge.is64 ? 104 : 80);
        }
        public final Win32.IDirectDrawSurface get_lpDDSPattern() {
            return Win32.instance.createIDirectDrawSurface(byteBase.getAddress(NativeBridge.is64 ? 104 : 80));
        }
        public final DDCOLORKEY get_ddckDestColorkey() {
            return instance.createDDCOLORKEY(getElementPointer(NativeBridge.is64 ? 112 : 84));
        }
        public final DDCOLORKEY get_ddckSrcColorkey() {
            return instance.createDDCOLORKEY(getElementPointer(NativeBridge.is64 ? 120 : 92));
        }
        @Override
        public int size() {
            return sizeof;
        }
    }

    public final DDBLTFX createDDBLTFX(boolean direct) {
        return new DDBLTFX(direct);
    }
    public final DDBLTFX createDDBLTFX(VoidPointer base) {
        return new DDBLTFX(base);
    }
    public final DDBLTFX createDDBLTFX(long addr) {
        return new DDBLTFX(addr);
    }


    public static class DDPIXELFORMAT extends CommonStructWrapper {

        public static final int sizeof = 32;

        DDPIXELFORMAT(boolean direct) {
            super(sizeof, direct);
        }
        DDPIXELFORMAT(VoidPointer base) {
            super(base);
        }
        DDPIXELFORMAT(long addr) {
            super(addr);
        }
        public final void set_dwSize(int val) {
            byteBase.setInt32(0, val);
        }
        public final int get_dwSize() {
            return byteBase.getInt32(0);
        }
        public final void set_dwFlags(int val) {
            byteBase.setInt32(4, val);
        }
        public final int get_dwFlags() {
            return byteBase.getInt32(4);
        }
        public final void set_dwFourCC(int val) {
            byteBase.setInt32(8, val);
        }
        public final int get_dwFourCC() {
            return byteBase.getInt32(8);
        }
        public final void set_dwRGBBitCount(int val) {
            byteBase.setInt32(12, val);
        }
        public final int get_dwRGBBitCount() {
            return byteBase.getInt32(12);
        }
        public final void set_dwYUVBitCount(int val) {
            byteBase.setInt32(12, val);
        }
        public final int get_dwYUVBitCount() {
            return byteBase.getInt32(12);
        }
        public final void set_dwZBufferBitDepth(int val) {
            byteBase.setInt32(12, val);
        }
        public final int get_dwZBufferBitDepth() {
            return byteBase.getInt32(12);
        }
        public final void set_dwAlphaBitDepth(int val) {
            byteBase.setInt32(12, val);
        }
        public final int get_dwAlphaBitDepth() {
            return byteBase.getInt32(12);
        }
        public final void set_dwLuminanceBitCount(int val) {
            byteBase.setInt32(12, val);
        }
        public final int get_dwLuminanceBitCount() {
            return byteBase.getInt32(12);
        }
        public final void set_dwBumpBitCount(int val) {
            byteBase.setInt32(12, val);
        }
        public final int get_dwBumpBitCount() {
            return byteBase.getInt32(12);
        }
        public final void set_dwPrivateFormatBitCount(int val) {
            byteBase.setInt32(12, val);
        }
        public final int get_dwPrivateFormatBitCount() {
            return byteBase.getInt32(12);
        }
        public final void set_dwRBitMask(int val) {
            byteBase.setInt32(16, val);
        }
        public final int get_dwRBitMask() {
            return byteBase.getInt32(16);
        }
        public final void set_dwYBitMask(int val) {
            byteBase.setInt32(16, val);
        }
        public final int get_dwYBitMask() {
            return byteBase.getInt32(16);
        }
        public final void set_dwStencilBitDepth(int val) {
            byteBase.setInt32(16, val);
        }
        public final int get_dwStencilBitDepth() {
            return byteBase.getInt32(16);
        }
        public final void set_dwLuminanceBitMask(int val) {
            byteBase.setInt32(16, val);
        }
        public final int get_dwLuminanceBitMask() {
            return byteBase.getInt32(16);
        }
        public final void set_dwBumpDuBitMask(int val) {
            byteBase.setInt32(16, val);
        }
        public final int get_dwBumpDuBitMask() {
            return byteBase.getInt32(16);
        }
        public final void set_dwOperations(int val) {
            byteBase.setInt32(16, val);
        }
        public final int get_dwOperations() {
            return byteBase.getInt32(16);
        }
        public final void set_dwGBitMask(int val) {
            byteBase.setInt32(20, val);
        }
        public final int get_dwGBitMask() {
            return byteBase.getInt32(20);
        }
        public final void set_dwUBitMask(int val) {
            byteBase.setInt32(20, val);
        }
        public final int get_dwUBitMask() {
            return byteBase.getInt32(20);
        }
        public final void set_dwZBitMask(int val) {
            byteBase.setInt32(20, val);
        }
        public final int get_dwZBitMask() {
            return byteBase.getInt32(20);
        }
        public final void set_dwBumpDvBitMask(int val) {
            byteBase.setInt32(20, val);
        }
        public final int get_dwBumpDvBitMask() {
            return byteBase.getInt32(20);
        }
        public final void set_MultiSampleCaps_wFlipMSTypes(short val) {
            byteBase.setInt16(20, val);
        }
        public final short get_MultiSampleCaps_wFlipMSTypes() {
            return byteBase.getInt16(20);
        }
        public final void set_MultiSampleCaps_wBltMSTypes(short val) {
            byteBase.setInt16(22, val);
        }
        public final short get_MultiSampleCaps_wBltMSTypes() {
            return byteBase.getInt16(22);
        }
        public final void set_dwBBitMask(int val) {
            byteBase.setInt32(24, val);
        }
        public final int get_dwBBitMask() {
            return byteBase.getInt32(24);
        }
        public final void set_dwVBitMask(int val) {
            byteBase.setInt32(24, val);
        }
        public final int get_dwVBitMask() {
            return byteBase.getInt32(24);
        }
        public final void set_dwStencilBitMask(int val) {
            byteBase.setInt32(24, val);
        }
        public final int get_dwStencilBitMask() {
            return byteBase.getInt32(24);
        }
        public final void set_dwBumpLuminanceBitMask(int val) {
            byteBase.setInt32(24, val);
        }
        public final int get_dwBumpLuminanceBitMask() {
            return byteBase.getInt32(24);
        }
        public final void set_dwRGBAlphaBitMask(int val) {
            byteBase.setInt32(28, val);
        }
        public final int get_dwRGBAlphaBitMask() {
            return byteBase.getInt32(28);
        }
        public final void set_dwYUVAlphaBitMask(int val) {
            byteBase.setInt32(28, val);
        }
        public final int get_dwYUVAlphaBitMask() {
            return byteBase.getInt32(28);
        }
        public final void set_dwLuminanceAlphaBitMask(int val) {
            byteBase.setInt32(28, val);
        }
        public final int get_dwLuminanceAlphaBitMask() {
            return byteBase.getInt32(28);
        }
        public final void set_dwRGBZBitMask(int val) {
            byteBase.setInt32(28, val);
        }
        public final int get_dwRGBZBitMask() {
            return byteBase.getInt32(28);
        }
        public final void set_dwYUVZBitMask(int val) {
            byteBase.setInt32(28, val);
        }
        public final int get_dwYUVZBitMask() {
            return byteBase.getInt32(28);
        }
        @Override
        public int size() {
            return sizeof;
        }
    }

    public final DDPIXELFORMAT createDDPIXELFORMAT(boolean direct) {
        return new DDPIXELFORMAT(direct);
    }
    public final DDPIXELFORMAT createDDPIXELFORMAT(VoidPointer base) {
        return new DDPIXELFORMAT(base);
    }
    public final DDPIXELFORMAT createDDPIXELFORMAT(long addr) {
        return new DDPIXELFORMAT(addr);
    }


    public static class IDirectDrawSurface7Vtbl extends CommonStructWrapper {

        public static final int sizeof = NativeBridge.is64 ? 392 : 196;

        IDirectDrawSurface7Vtbl(boolean direct) {
            super(sizeof, direct);
        }
        IDirectDrawSurface7Vtbl(VoidPointer base) {
            super(base);
        }
        IDirectDrawSurface7Vtbl(long addr) {
            super(addr);
        }
        public final void set_QueryInterface(long val) {
            byteBase.setAddress(0, val);
        }
        public final long get_QueryInterface() {
            return byteBase.getAddress(0);
        }
        public final int QueryInterface(Win32.IDirectDrawSurface7 This, Win32.GUID riid, PointerPointer ppvObj) {
            long tmp_0 = This == null ? 0 : This.longLockPointer();
            long tmp_1 = riid == null ? 0 : riid.longLockPointer();
            long tmp_2 = ppvObj == null ? 0 : ppvObj.longLockPointer();
            int tmp_ret = instance.proxycall107(get_QueryInterface(), tmp_0, tmp_1, tmp_2);
            if (This != null) {
                This.unlock();
            }
            if (riid != null) {
                riid.unlock();
            }
            if (ppvObj != null) {
                ppvObj.unlock();
            }
            return tmp_ret;
        }
        public final void set_AddRef(long val) {
            byteBase.setAddress(NativeBridge.is64 ? 8 : 4, val);
        }
        public final long get_AddRef() {
            return byteBase.getAddress(NativeBridge.is64 ? 8 : 4);
        }
        public final int AddRef(Win32.IDirectDrawSurface7 This) {
            long tmp_0 = This == null ? 0 : This.longLockPointer();
            int tmp_ret = instance.proxycall108(get_AddRef(), tmp_0);
            if (This != null) {
                This.unlock();
            }
            return tmp_ret;
        }
        public final void set_Release(long val) {
            byteBase.setAddress(NativeBridge.is64 ? 16 : 8, val);
        }
        public final long get_Release() {
            return byteBase.getAddress(NativeBridge.is64 ? 16 : 8);
        }
        public final int Release(Win32.IDirectDrawSurface7 This) {
            long tmp_0 = This == null ? 0 : This.longLockPointer();
            int tmp_ret = instance.proxycall109(get_Release(), tmp_0);
            if (This != null) {
                This.unlock();
            }
            return tmp_ret;
        }
        public final void set_AddAttachedSurface(long val) {
            byteBase.setAddress(NativeBridge.is64 ? 24 : 12, val);
        }
        public final long get_AddAttachedSurface() {
            return byteBase.getAddress(NativeBridge.is64 ? 24 : 12);
        }
        public final int AddAttachedSurface(Win32.IDirectDrawSurface7 This, Win32.IDirectDrawSurface7 param_1) {
            long tmp_0 = This == null ? 0 : This.longLockPointer();
            long tmp_1 = param_1 == null ? 0 : param_1.longLockPointer();
            int tmp_ret = instance.proxycall110(get_AddAttachedSurface(), tmp_0, tmp_1);
            if (This != null) {
                This.unlock();
            }
            if (param_1 != null) {
                param_1.unlock();
            }
            return tmp_ret;
        }
        public final void set_AddOverlayDirtyRect(long val) {
            byteBase.setAddress(NativeBridge.is64 ? 32 : 16, val);
        }
        public final long get_AddOverlayDirtyRect() {
            return byteBase.getAddress(NativeBridge.is64 ? 32 : 16);
        }
        public final int AddOverlayDirtyRect(Win32.IDirectDrawSurface7 This, Win32.RECT param_1) {
            long tmp_0 = This == null ? 0 : This.longLockPointer();
            long tmp_1 = param_1 == null ? 0 : param_1.longLockPointer();
            int tmp_ret = instance.proxycall111(get_AddOverlayDirtyRect(), tmp_0, tmp_1);
            if (This != null) {
                This.unlock();
            }
            if (param_1 != null) {
                param_1.unlock();
            }
            return tmp_ret;
        }
        public final void set_Blt(long val) {
            byteBase.setAddress(NativeBridge.is64 ? 40 : 20, val);
        }
        public final long get_Blt() {
            return byteBase.getAddress(NativeBridge.is64 ? 40 : 20);
        }
        public final int Blt(Win32.IDirectDrawSurface7 This, Win32.RECT param_1, Win32.IDirectDrawSurface7 param_2, Win32.RECT param_3, int param_4, Win32.DDBLTFX param_5) {
            long tmp_0 = This == null ? 0 : This.longLockPointer();
            long tmp_1 = param_1 == null ? 0 : param_1.longLockPointer();
            long tmp_2 = param_2 == null ? 0 : param_2.longLockPointer();
            long tmp_3 = param_3 == null ? 0 : param_3.longLockPointer();
            long tmp_4 = param_5 == null ? 0 : param_5.longLockPointer();
            int tmp_ret = instance.proxycall112(get_Blt(), tmp_0, tmp_1, tmp_2, tmp_3, param_4, tmp_4);
            if (This != null) {
                This.unlock();
            }
            if (param_1 != null) {
                param_1.unlock();
            }
            if (param_2 != null) {
                param_2.unlock();
            }
            if (param_3 != null) {
                param_3.unlock();
            }
            if (param_5 != null) {
                param_5.unlock();
            }
            return tmp_ret;
        }
        public final void set_BltBatch(long val) {
            byteBase.setAddress(NativeBridge.is64 ? 48 : 24, val);
        }
        public final long get_BltBatch() {
            return byteBase.getAddress(NativeBridge.is64 ? 48 : 24);
        }
        public final int BltBatch(Win32.IDirectDrawSurface7 This, DDBLTBATCH param_1, int param_2, int param_3) {
            long tmp_0 = This == null ? 0 : This.longLockPointer();
            long tmp_1 = param_1 == null ? 0 : param_1.longLockPointer();
            int tmp_ret = instance.proxycall113(get_BltBatch(), tmp_0, tmp_1, param_2, param_3);
            if (This != null) {
                This.unlock();
            }
            if (param_1 != null) {
                param_1.unlock();
            }
            return tmp_ret;
        }
        public final void set_BltFast(long val) {
            byteBase.setAddress(NativeBridge.is64 ? 56 : 28, val);
        }
        public final long get_BltFast() {
            return byteBase.getAddress(NativeBridge.is64 ? 56 : 28);
        }
        public final int BltFast(Win32.IDirectDrawSurface7 This, int param_1, int param_2, Win32.IDirectDrawSurface7 param_3, Win32.RECT param_4, int param_5) {
            long tmp_0 = This == null ? 0 : This.longLockPointer();
            long tmp_1 = param_3 == null ? 0 : param_3.longLockPointer();
            long tmp_2 = param_4 == null ? 0 : param_4.longLockPointer();
            int tmp_ret = instance.proxycall114(get_BltFast(), tmp_0, param_1, param_2, tmp_1, tmp_2, param_5);
            if (This != null) {
                This.unlock();
            }
            if (param_3 != null) {
                param_3.unlock();
            }
            if (param_4 != null) {
                param_4.unlock();
            }
            return tmp_ret;
        }
        public final void set_DeleteAttachedSurface(long val) {
            byteBase.setAddress(NativeBridge.is64 ? 64 : 32, val);
        }
        public final long get_DeleteAttachedSurface() {
            return byteBase.getAddress(NativeBridge.is64 ? 64 : 32);
        }
        public final int DeleteAttachedSurface(Win32.IDirectDrawSurface7 This, int param_1, Win32.IDirectDrawSurface7 param_2) {
            long tmp_0 = This == null ? 0 : This.longLockPointer();
            long tmp_1 = param_2 == null ? 0 : param_2.longLockPointer();
            int tmp_ret = instance.proxycall115(get_DeleteAttachedSurface(), tmp_0, param_1, tmp_1);
            if (This != null) {
                This.unlock();
            }
            if (param_2 != null) {
                param_2.unlock();
            }
            return tmp_ret;
        }
        public final void set_EnumAttachedSurfaces(long val) {
            byteBase.setAddress(NativeBridge.is64 ? 72 : 36, val);
        }
        public final long get_EnumAttachedSurfaces() {
            return byteBase.getAddress(NativeBridge.is64 ? 72 : 36);
        }
        public final int EnumAttachedSurfaces(Win32.IDirectDrawSurface7 This, VoidPointer param_1, long param_2) {
            long tmp_0 = This == null ? 0 : This.longLockPointer();
            long tmp_1 = param_1 == null ? 0 : param_1.longLockPointer();
            int tmp_ret = instance.proxycall116(get_EnumAttachedSurfaces(), tmp_0, tmp_1, param_2);
            if (This != null) {
                This.unlock();
            }
            if (param_1 != null) {
                param_1.unlock();
            }
            return tmp_ret;
        }
        public final void set_EnumOverlayZOrders(long val) {
            byteBase.setAddress(NativeBridge.is64 ? 80 : 40, val);
        }
        public final long get_EnumOverlayZOrders() {
            return byteBase.getAddress(NativeBridge.is64 ? 80 : 40);
        }
        public final int EnumOverlayZOrders(Win32.IDirectDrawSurface7 This, int param_1, VoidPointer param_2, long param_3) {
            long tmp_0 = This == null ? 0 : This.longLockPointer();
            long tmp_1 = param_2 == null ? 0 : param_2.longLockPointer();
            int tmp_ret = instance.proxycall117(get_EnumOverlayZOrders(), tmp_0, param_1, tmp_1, param_3);
            if (This != null) {
                This.unlock();
            }
            if (param_2 != null) {
                param_2.unlock();
            }
            return tmp_ret;
        }
        public final void set_Flip(long val) {
            byteBase.setAddress(NativeBridge.is64 ? 88 : 44, val);
        }
        public final long get_Flip() {
            return byteBase.getAddress(NativeBridge.is64 ? 88 : 44);
        }
        public final int Flip(Win32.IDirectDrawSurface7 This, Win32.IDirectDrawSurface7 param_1, int param_2) {
            long tmp_0 = This == null ? 0 : This.longLockPointer();
            long tmp_1 = param_1 == null ? 0 : param_1.longLockPointer();
            int tmp_ret = instance.proxycall118(get_Flip(), tmp_0, tmp_1, param_2);
            if (This != null) {
                This.unlock();
            }
            if (param_1 != null) {
                param_1.unlock();
            }
            return tmp_ret;
        }
        public final void set_GetAttachedSurface(long val) {
            byteBase.setAddress(NativeBridge.is64 ? 96 : 48, val);
        }
        public final long get_GetAttachedSurface() {
            return byteBase.getAddress(NativeBridge.is64 ? 96 : 48);
        }
        public final int GetAttachedSurface(Win32.IDirectDrawSurface7 This, Win32.DDSCAPS2 param_1, PointerPointer param_2) {
            long tmp_0 = This == null ? 0 : This.longLockPointer();
            long tmp_1 = param_1 == null ? 0 : param_1.longLockPointer();
            long tmp_2 = param_2 == null ? 0 : param_2.longLockPointer();
            int tmp_ret = instance.proxycall119(get_GetAttachedSurface(), tmp_0, tmp_1, tmp_2);
            if (This != null) {
                This.unlock();
            }
            if (param_1 != null) {
                param_1.unlock();
            }
            if (param_2 != null) {
                param_2.unlock();
            }
            return tmp_ret;
        }
        public final void set_GetBltStatus(long val) {
            byteBase.setAddress(NativeBridge.is64 ? 104 : 52, val);
        }
        public final long get_GetBltStatus() {
            return byteBase.getAddress(NativeBridge.is64 ? 104 : 52);
        }
        public final int GetBltStatus(Win32.IDirectDrawSurface7 This, int param_1) {
            long tmp_0 = This == null ? 0 : This.longLockPointer();
            int tmp_ret = instance.proxycall120(get_GetBltStatus(), tmp_0, param_1);
            if (This != null) {
                This.unlock();
            }
            return tmp_ret;
        }
        public final void set_GetCaps(long val) {
            byteBase.setAddress(NativeBridge.is64 ? 112 : 56, val);
        }
        public final long get_GetCaps() {
            return byteBase.getAddress(NativeBridge.is64 ? 112 : 56);
        }
        public final int GetCaps(Win32.IDirectDrawSurface7 This, Win32.DDSCAPS2 param_1) {
            long tmp_0 = This == null ? 0 : This.longLockPointer();
            long tmp_1 = param_1 == null ? 0 : param_1.longLockPointer();
            int tmp_ret = instance.proxycall121(get_GetCaps(), tmp_0, tmp_1);
            if (This != null) {
                This.unlock();
            }
            if (param_1 != null) {
                param_1.unlock();
            }
            return tmp_ret;
        }
        public final void set_GetClipper(long val) {
            byteBase.setAddress(NativeBridge.is64 ? 120 : 60, val);
        }
        public final long get_GetClipper() {
            return byteBase.getAddress(NativeBridge.is64 ? 120 : 60);
        }
        public final int GetClipper(Win32.IDirectDrawSurface7 This, PointerPointer param_1) {
            long tmp_0 = This == null ? 0 : This.longLockPointer();
            long tmp_1 = param_1 == null ? 0 : param_1.longLockPointer();
            int tmp_ret = instance.proxycall122(get_GetClipper(), tmp_0, tmp_1);
            if (This != null) {
                This.unlock();
            }
            if (param_1 != null) {
                param_1.unlock();
            }
            return tmp_ret;
        }
        public final void set_GetColorKey(long val) {
            byteBase.setAddress(NativeBridge.is64 ? 128 : 64, val);
        }
        public final long get_GetColorKey() {
            return byteBase.getAddress(NativeBridge.is64 ? 128 : 64);
        }
        public final int GetColorKey(Win32.IDirectDrawSurface7 This, int param_1, DDCOLORKEY param_2) {
            long tmp_0 = This == null ? 0 : This.longLockPointer();
            long tmp_1 = param_2 == null ? 0 : param_2.longLockPointer();
            int tmp_ret = instance.proxycall123(get_GetColorKey(), tmp_0, param_1, tmp_1);
            if (This != null) {
                This.unlock();
            }
            if (param_2 != null) {
                param_2.unlock();
            }
            return tmp_ret;
        }
        public final void set_GetDC(long val) {
            byteBase.setAddress(NativeBridge.is64 ? 136 : 68, val);
        }
        public final long get_GetDC() {
            return byteBase.getAddress(NativeBridge.is64 ? 136 : 68);
        }
        public final int GetDC(Win32.IDirectDrawSurface7 This, PointerPointer param_1) {
            long tmp_0 = This == null ? 0 : This.longLockPointer();
            long tmp_1 = param_1 == null ? 0 : param_1.longLockPointer();
            int tmp_ret = instance.proxycall124(get_GetDC(), tmp_0, tmp_1);
            if (This != null) {
                This.unlock();
            }
            if (param_1 != null) {
                param_1.unlock();
            }
            return tmp_ret;
        }
        public final void set_GetFlipStatus(long val) {
            byteBase.setAddress(NativeBridge.is64 ? 144 : 72, val);
        }
        public final long get_GetFlipStatus() {
            return byteBase.getAddress(NativeBridge.is64 ? 144 : 72);
        }
        public final int GetFlipStatus(Win32.IDirectDrawSurface7 This, int param_1) {
            long tmp_0 = This == null ? 0 : This.longLockPointer();
            int tmp_ret = instance.proxycall125(get_GetFlipStatus(), tmp_0, param_1);
            if (This != null) {
                This.unlock();
            }
            return tmp_ret;
        }
        public final void set_GetOverlayPosition(long val) {
            byteBase.setAddress(NativeBridge.is64 ? 152 : 76, val);
        }
        public final long get_GetOverlayPosition() {
            return byteBase.getAddress(NativeBridge.is64 ? 152 : 76);
        }
        public final int GetOverlayPosition(Win32.IDirectDrawSurface7 This, Int32Pointer param_1, Int32Pointer param_2) {
            long tmp_0 = This == null ? 0 : This.longLockPointer();
            long tmp_1 = param_1 == null ? 0 : param_1.longLockPointer();
            long tmp_2 = param_2 == null ? 0 : param_2.longLockPointer();
            int tmp_ret = instance.proxycall126(get_GetOverlayPosition(), tmp_0, tmp_1, tmp_2);
            if (This != null) {
                This.unlock();
            }
            if (param_1 != null) {
                param_1.unlock();
            }
            if (param_2 != null) {
                param_2.unlock();
            }
            return tmp_ret;
        }
        public final void set_GetPalette(long val) {
            byteBase.setAddress(NativeBridge.is64 ? 160 : 80, val);
        }
        public final long get_GetPalette() {
            return byteBase.getAddress(NativeBridge.is64 ? 160 : 80);
        }
        public final int GetPalette(Win32.IDirectDrawSurface7 This, PointerPointer param_1) {
            long tmp_0 = This == null ? 0 : This.longLockPointer();
            long tmp_1 = param_1 == null ? 0 : param_1.longLockPointer();
            int tmp_ret = instance.proxycall127(get_GetPalette(), tmp_0, tmp_1);
            if (This != null) {
                This.unlock();
            }
            if (param_1 != null) {
                param_1.unlock();
            }
            return tmp_ret;
        }
        public final void set_GetPixelFormat(long val) {
            byteBase.setAddress(NativeBridge.is64 ? 168 : 84, val);
        }
        public final long get_GetPixelFormat() {
            return byteBase.getAddress(NativeBridge.is64 ? 168 : 84);
        }
        public final int GetPixelFormat(Win32.IDirectDrawSurface7 This, Win32.DDPIXELFORMAT param_1) {
            long tmp_0 = This == null ? 0 : This.longLockPointer();
            long tmp_1 = param_1 == null ? 0 : param_1.longLockPointer();
            int tmp_ret = instance.proxycall128(get_GetPixelFormat(), tmp_0, tmp_1);
            if (This != null) {
                This.unlock();
            }
            if (param_1 != null) {
                param_1.unlock();
            }
            return tmp_ret;
        }
        public final void set_GetSurfaceDesc(long val) {
            byteBase.setAddress(NativeBridge.is64 ? 176 : 88, val);
        }
        public final long get_GetSurfaceDesc() {
            return byteBase.getAddress(NativeBridge.is64 ? 176 : 88);
        }
        public final int GetSurfaceDesc(Win32.IDirectDrawSurface7 This, Win32.DDSURFACEDESC2 param_1) {
            long tmp_0 = This == null ? 0 : This.longLockPointer();
            long tmp_1 = param_1 == null ? 0 : param_1.longLockPointer();
            int tmp_ret = instance.proxycall129(get_GetSurfaceDesc(), tmp_0, tmp_1);
            if (This != null) {
                This.unlock();
            }
            if (param_1 != null) {
                param_1.unlock();
            }
            return tmp_ret;
        }
        public final void set_Initialize(long val) {
            byteBase.setAddress(NativeBridge.is64 ? 184 : 92, val);
        }
        public final long get_Initialize() {
            return byteBase.getAddress(NativeBridge.is64 ? 184 : 92);
        }
        public final int Initialize(Win32.IDirectDrawSurface7 This, Win32.IDirectDraw param_1, Win32.DDSURFACEDESC2 param_2) {
            long tmp_0 = This == null ? 0 : This.longLockPointer();
            long tmp_1 = param_1 == null ? 0 : param_1.longLockPointer();
            long tmp_2 = param_2 == null ? 0 : param_2.longLockPointer();
            int tmp_ret = instance.proxycall130(get_Initialize(), tmp_0, tmp_1, tmp_2);
            if (This != null) {
                This.unlock();
            }
            if (param_1 != null) {
                param_1.unlock();
            }
            if (param_2 != null) {
                param_2.unlock();
            }
            return tmp_ret;
        }
        public final void set_IsLost(long val) {
            byteBase.setAddress(NativeBridge.is64 ? 192 : 96, val);
        }
        public final long get_IsLost() {
            return byteBase.getAddress(NativeBridge.is64 ? 192 : 96);
        }
        public final int IsLost(Win32.IDirectDrawSurface7 This) {
            long tmp_0 = This == null ? 0 : This.longLockPointer();
            int tmp_ret = instance.proxycall131(get_IsLost(), tmp_0);
            if (This != null) {
                This.unlock();
            }
            return tmp_ret;
        }
        public final void set_Lock(long val) {
            byteBase.setAddress(NativeBridge.is64 ? 200 : 100, val);
        }
        public final long get_Lock() {
            return byteBase.getAddress(NativeBridge.is64 ? 200 : 100);
        }
        public final int Lock(Win32.IDirectDrawSurface7 This, Win32.RECT param_1, Win32.DDSURFACEDESC2 param_2, int param_3, VoidPointer param_4) {
            long tmp_0 = This == null ? 0 : This.longLockPointer();
            long tmp_1 = param_1 == null ? 0 : param_1.longLockPointer();
            long tmp_2 = param_2 == null ? 0 : param_2.longLockPointer();
            long tmp_3 = param_4 == null ? 0 : param_4.longLockPointer();
            int tmp_ret = instance.proxycall132(get_Lock(), tmp_0, tmp_1, tmp_2, param_3, tmp_3);
            if (This != null) {
                This.unlock();
            }
            if (param_1 != null) {
                param_1.unlock();
            }
            if (param_2 != null) {
                param_2.unlock();
            }
            if (param_4 != null) {
                param_4.unlock();
            }
            return tmp_ret;
        }
        public final void set_ReleaseDC(long val) {
            byteBase.setAddress(NativeBridge.is64 ? 208 : 104, val);
        }
        public final long get_ReleaseDC() {
            return byteBase.getAddress(NativeBridge.is64 ? 208 : 104);
        }
        public final int ReleaseDC(Win32.IDirectDrawSurface7 This, long param_1) {
            long tmp_0 = This == null ? 0 : This.longLockPointer();
            int tmp_ret = instance.proxycall133(get_ReleaseDC(), tmp_0, param_1);
            if (This != null) {
                This.unlock();
            }
            return tmp_ret;
        }
        public final void set_Restore(long val) {
            byteBase.setAddress(NativeBridge.is64 ? 216 : 108, val);
        }
        public final long get_Restore() {
            return byteBase.getAddress(NativeBridge.is64 ? 216 : 108);
        }
        public final int Restore(Win32.IDirectDrawSurface7 This) {
            long tmp_0 = This == null ? 0 : This.longLockPointer();
            int tmp_ret = instance.proxycall134(get_Restore(), tmp_0);
            if (This != null) {
                This.unlock();
            }
            return tmp_ret;
        }
        public final void set_SetClipper(long val) {
            byteBase.setAddress(NativeBridge.is64 ? 224 : 112, val);
        }
        public final long get_SetClipper() {
            return byteBase.getAddress(NativeBridge.is64 ? 224 : 112);
        }
        public final int SetClipper(Win32.IDirectDrawSurface7 This, Win32.IDirectDrawClipper param_1) {
            long tmp_0 = This == null ? 0 : This.longLockPointer();
            long tmp_1 = param_1 == null ? 0 : param_1.longLockPointer();
            int tmp_ret = instance.proxycall135(get_SetClipper(), tmp_0, tmp_1);
            if (This != null) {
                This.unlock();
            }
            if (param_1 != null) {
                param_1.unlock();
            }
            return tmp_ret;
        }
        public final void set_SetColorKey(long val) {
            byteBase.setAddress(NativeBridge.is64 ? 232 : 116, val);
        }
        public final long get_SetColorKey() {
            return byteBase.getAddress(NativeBridge.is64 ? 232 : 116);
        }
        public final int SetColorKey(Win32.IDirectDrawSurface7 This, int param_1, DDCOLORKEY param_2) {
            long tmp_0 = This == null ? 0 : This.longLockPointer();
            long tmp_1 = param_2 == null ? 0 : param_2.longLockPointer();
            int tmp_ret = instance.proxycall136(get_SetColorKey(), tmp_0, param_1, tmp_1);
            if (This != null) {
                This.unlock();
            }
            if (param_2 != null) {
                param_2.unlock();
            }
            return tmp_ret;
        }
        public final void set_SetOverlayPosition(long val) {
            byteBase.setAddress(NativeBridge.is64 ? 240 : 120, val);
        }
        public final long get_SetOverlayPosition() {
            return byteBase.getAddress(NativeBridge.is64 ? 240 : 120);
        }
        public final int SetOverlayPosition(Win32.IDirectDrawSurface7 This, int param_1, int param_2) {
            long tmp_0 = This == null ? 0 : This.longLockPointer();
            int tmp_ret = instance.proxycall137(get_SetOverlayPosition(), tmp_0, param_1, param_2);
            if (This != null) {
                This.unlock();
            }
            return tmp_ret;
        }
        public final void set_SetPalette(long val) {
            byteBase.setAddress(NativeBridge.is64 ? 248 : 124, val);
        }
        public final long get_SetPalette() {
            return byteBase.getAddress(NativeBridge.is64 ? 248 : 124);
        }
        public final int SetPalette(Win32.IDirectDrawSurface7 This, Win32.IDirectDrawPalette param_1) {
            long tmp_0 = This == null ? 0 : This.longLockPointer();
            long tmp_1 = param_1 == null ? 0 : param_1.longLockPointer();
            int tmp_ret = instance.proxycall138(get_SetPalette(), tmp_0, tmp_1);
            if (This != null) {
                This.unlock();
            }
            if (param_1 != null) {
                param_1.unlock();
            }
            return tmp_ret;
        }
        public final void set_Unlock(long val) {
            byteBase.setAddress(NativeBridge.is64 ? 256 : 128, val);
        }
        public final long get_Unlock() {
            return byteBase.getAddress(NativeBridge.is64 ? 256 : 128);
        }
        public final int Unlock(Win32.IDirectDrawSurface7 This, Win32.RECT param_1) {
            long tmp_0 = This == null ? 0 : This.longLockPointer();
            long tmp_1 = param_1 == null ? 0 : param_1.longLockPointer();
            int tmp_ret = instance.proxycall139(get_Unlock(), tmp_0, tmp_1);
            if (This != null) {
                This.unlock();
            }
            if (param_1 != null) {
                param_1.unlock();
            }
            return tmp_ret;
        }
        public final void set_UpdateOverlay(long val) {
            byteBase.setAddress(NativeBridge.is64 ? 264 : 132, val);
        }
        public final long get_UpdateOverlay() {
            return byteBase.getAddress(NativeBridge.is64 ? 264 : 132);
        }
        public final int UpdateOverlay(Win32.IDirectDrawSurface7 This, Win32.RECT param_1, Win32.IDirectDrawSurface7 param_2, Win32.RECT param_3, int param_4, Win32.DDOVERLAYFX param_5) {
            long tmp_0 = This == null ? 0 : This.longLockPointer();
            long tmp_1 = param_1 == null ? 0 : param_1.longLockPointer();
            long tmp_2 = param_2 == null ? 0 : param_2.longLockPointer();
            long tmp_3 = param_3 == null ? 0 : param_3.longLockPointer();
            long tmp_4 = param_5 == null ? 0 : param_5.longLockPointer();
            int tmp_ret = instance.proxycall140(get_UpdateOverlay(), tmp_0, tmp_1, tmp_2, tmp_3, param_4, tmp_4);
            if (This != null) {
                This.unlock();
            }
            if (param_1 != null) {
                param_1.unlock();
            }
            if (param_2 != null) {
                param_2.unlock();
            }
            if (param_3 != null) {
                param_3.unlock();
            }
            if (param_5 != null) {
                param_5.unlock();
            }
            return tmp_ret;
        }
        public final void set_UpdateOverlayDisplay(long val) {
            byteBase.setAddress(NativeBridge.is64 ? 272 : 136, val);
        }
        public final long get_UpdateOverlayDisplay() {
            return byteBase.getAddress(NativeBridge.is64 ? 272 : 136);
        }
        public final int UpdateOverlayDisplay(Win32.IDirectDrawSurface7 This, int param_1) {
            long tmp_0 = This == null ? 0 : This.longLockPointer();
            int tmp_ret = instance.proxycall141(get_UpdateOverlayDisplay(), tmp_0, param_1);
            if (This != null) {
                This.unlock();
            }
            return tmp_ret;
        }
        public final void set_UpdateOverlayZOrder(long val) {
            byteBase.setAddress(NativeBridge.is64 ? 280 : 140, val);
        }
        public final long get_UpdateOverlayZOrder() {
            return byteBase.getAddress(NativeBridge.is64 ? 280 : 140);
        }
        public final int UpdateOverlayZOrder(Win32.IDirectDrawSurface7 This, int param_1, Win32.IDirectDrawSurface7 param_2) {
            long tmp_0 = This == null ? 0 : This.longLockPointer();
            long tmp_1 = param_2 == null ? 0 : param_2.longLockPointer();
            int tmp_ret = instance.proxycall142(get_UpdateOverlayZOrder(), tmp_0, param_1, tmp_1);
            if (This != null) {
                This.unlock();
            }
            if (param_2 != null) {
                param_2.unlock();
            }
            return tmp_ret;
        }
        public final void set_GetDDInterface(long val) {
            byteBase.setAddress(NativeBridge.is64 ? 288 : 144, val);
        }
        public final long get_GetDDInterface() {
            return byteBase.getAddress(NativeBridge.is64 ? 288 : 144);
        }
        public final int GetDDInterface(Win32.IDirectDrawSurface7 This, PointerPointer param_1) {
            long tmp_0 = This == null ? 0 : This.longLockPointer();
            long tmp_1 = param_1 == null ? 0 : param_1.longLockPointer();
            int tmp_ret = instance.proxycall143(get_GetDDInterface(), tmp_0, tmp_1);
            if (This != null) {
                This.unlock();
            }
            if (param_1 != null) {
                param_1.unlock();
            }
            return tmp_ret;
        }
        public final void set_PageLock(long val) {
            byteBase.setAddress(NativeBridge.is64 ? 296 : 148, val);
        }
        public final long get_PageLock() {
            return byteBase.getAddress(NativeBridge.is64 ? 296 : 148);
        }
        public final int PageLock(Win32.IDirectDrawSurface7 This, int param_1) {
            long tmp_0 = This == null ? 0 : This.longLockPointer();
            int tmp_ret = instance.proxycall144(get_PageLock(), tmp_0, param_1);
            if (This != null) {
                This.unlock();
            }
            return tmp_ret;
        }
        public final void set_PageUnlock(long val) {
            byteBase.setAddress(NativeBridge.is64 ? 304 : 152, val);
        }
        public final long get_PageUnlock() {
            return byteBase.getAddress(NativeBridge.is64 ? 304 : 152);
        }
        public final int PageUnlock(Win32.IDirectDrawSurface7 This, int param_1) {
            long tmp_0 = This == null ? 0 : This.longLockPointer();
            int tmp_ret = instance.proxycall145(get_PageUnlock(), tmp_0, param_1);
            if (This != null) {
                This.unlock();
            }
            return tmp_ret;
        }
        public final void set_SetSurfaceDesc(long val) {
            byteBase.setAddress(NativeBridge.is64 ? 312 : 156, val);
        }
        public final long get_SetSurfaceDesc() {
            return byteBase.getAddress(NativeBridge.is64 ? 312 : 156);
        }
        public final int SetSurfaceDesc(Win32.IDirectDrawSurface7 This, Win32.DDSURFACEDESC2 param_1, int param_2) {
            long tmp_0 = This == null ? 0 : This.longLockPointer();
            long tmp_1 = param_1 == null ? 0 : param_1.longLockPointer();
            int tmp_ret = instance.proxycall146(get_SetSurfaceDesc(), tmp_0, tmp_1, param_2);
            if (This != null) {
                This.unlock();
            }
            if (param_1 != null) {
                param_1.unlock();
            }
            return tmp_ret;
        }
        public final void set_SetPrivateData(long val) {
            byteBase.setAddress(NativeBridge.is64 ? 320 : 160, val);
        }
        public final long get_SetPrivateData() {
            return byteBase.getAddress(NativeBridge.is64 ? 320 : 160);
        }
        public final int SetPrivateData(Win32.IDirectDrawSurface7 This, Win32.GUID param_1, VoidPointer param_2, int param_3, int param_4) {
            long tmp_0 = This == null ? 0 : This.longLockPointer();
            long tmp_1 = param_1 == null ? 0 : param_1.longLockPointer();
            long tmp_2 = param_2 == null ? 0 : param_2.longLockPointer();
            int tmp_ret = instance.proxycall147(get_SetPrivateData(), tmp_0, tmp_1, tmp_2, param_3, param_4);
            if (This != null) {
                This.unlock();
            }
            if (param_1 != null) {
                param_1.unlock();
            }
            if (param_2 != null) {
                param_2.unlock();
            }
            return tmp_ret;
        }
        public final void set_GetPrivateData(long val) {
            byteBase.setAddress(NativeBridge.is64 ? 328 : 164, val);
        }
        public final long get_GetPrivateData() {
            return byteBase.getAddress(NativeBridge.is64 ? 328 : 164);
        }
        public final int GetPrivateData(Win32.IDirectDrawSurface7 This, Win32.GUID param_1, VoidPointer param_2, Int32Pointer param_3) {
            long tmp_0 = This == null ? 0 : This.longLockPointer();
            long tmp_1 = param_1 == null ? 0 : param_1.longLockPointer();
            long tmp_2 = param_2 == null ? 0 : param_2.longLockPointer();
            long tmp_3 = param_3 == null ? 0 : param_3.longLockPointer();
            int tmp_ret = instance.proxycall148(get_GetPrivateData(), tmp_0, tmp_1, tmp_2, tmp_3);
            if (This != null) {
                This.unlock();
            }
            if (param_1 != null) {
                param_1.unlock();
            }
            if (param_2 != null) {
                param_2.unlock();
            }
            if (param_3 != null) {
                param_3.unlock();
            }
            return tmp_ret;
        }
        public final void set_FreePrivateData(long val) {
            byteBase.setAddress(NativeBridge.is64 ? 336 : 168, val);
        }
        public final long get_FreePrivateData() {
            return byteBase.getAddress(NativeBridge.is64 ? 336 : 168);
        }
        public final int FreePrivateData(Win32.IDirectDrawSurface7 This, Win32.GUID param_1) {
            long tmp_0 = This == null ? 0 : This.longLockPointer();
            long tmp_1 = param_1 == null ? 0 : param_1.longLockPointer();
            int tmp_ret = instance.proxycall149(get_FreePrivateData(), tmp_0, tmp_1);
            if (This != null) {
                This.unlock();
            }
            if (param_1 != null) {
                param_1.unlock();
            }
            return tmp_ret;
        }
        public final void set_GetUniquenessValue(long val) {
            byteBase.setAddress(NativeBridge.is64 ? 344 : 172, val);
        }
        public final long get_GetUniquenessValue() {
            return byteBase.getAddress(NativeBridge.is64 ? 344 : 172);
        }
        public final int GetUniquenessValue(Win32.IDirectDrawSurface7 This, Int32Pointer param_1) {
            long tmp_0 = This == null ? 0 : This.longLockPointer();
            long tmp_1 = param_1 == null ? 0 : param_1.longLockPointer();
            int tmp_ret = instance.proxycall150(get_GetUniquenessValue(), tmp_0, tmp_1);
            if (This != null) {
                This.unlock();
            }
            if (param_1 != null) {
                param_1.unlock();
            }
            return tmp_ret;
        }
        public final void set_ChangeUniquenessValue(long val) {
            byteBase.setAddress(NativeBridge.is64 ? 352 : 176, val);
        }
        public final long get_ChangeUniquenessValue() {
            return byteBase.getAddress(NativeBridge.is64 ? 352 : 176);
        }
        public final int ChangeUniquenessValue(Win32.IDirectDrawSurface7 This) {
            long tmp_0 = This == null ? 0 : This.longLockPointer();
            int tmp_ret = instance.proxycall151(get_ChangeUniquenessValue(), tmp_0);
            if (This != null) {
                This.unlock();
            }
            return tmp_ret;
        }
        public final void set_SetPriority(long val) {
            byteBase.setAddress(NativeBridge.is64 ? 360 : 180, val);
        }
        public final long get_SetPriority() {
            return byteBase.getAddress(NativeBridge.is64 ? 360 : 180);
        }
        public final int SetPriority(Win32.IDirectDrawSurface7 This, int param_1) {
            long tmp_0 = This == null ? 0 : This.longLockPointer();
            int tmp_ret = instance.proxycall152(get_SetPriority(), tmp_0, param_1);
            if (This != null) {
                This.unlock();
            }
            return tmp_ret;
        }
        public final void set_GetPriority(long val) {
            byteBase.setAddress(NativeBridge.is64 ? 368 : 184, val);
        }
        public final long get_GetPriority() {
            return byteBase.getAddress(NativeBridge.is64 ? 368 : 184);
        }
        public final int GetPriority(Win32.IDirectDrawSurface7 This, Int32Pointer param_1) {
            long tmp_0 = This == null ? 0 : This.longLockPointer();
            long tmp_1 = param_1 == null ? 0 : param_1.longLockPointer();
            int tmp_ret = instance.proxycall153(get_GetPriority(), tmp_0, tmp_1);
            if (This != null) {
                This.unlock();
            }
            if (param_1 != null) {
                param_1.unlock();
            }
            return tmp_ret;
        }
        public final void set_SetLOD(long val) {
            byteBase.setAddress(NativeBridge.is64 ? 376 : 188, val);
        }
        public final long get_SetLOD() {
            return byteBase.getAddress(NativeBridge.is64 ? 376 : 188);
        }
        public final int SetLOD(Win32.IDirectDrawSurface7 This, int param_1) {
            long tmp_0 = This == null ? 0 : This.longLockPointer();
            int tmp_ret = instance.proxycall154(get_SetLOD(), tmp_0, param_1);
            if (This != null) {
                This.unlock();
            }
            return tmp_ret;
        }
        public final void set_GetLOD(long val) {
            byteBase.setAddress(NativeBridge.is64 ? 384 : 192, val);
        }
        public final long get_GetLOD() {
            return byteBase.getAddress(NativeBridge.is64 ? 384 : 192);
        }
        public final int GetLOD(Win32.IDirectDrawSurface7 This, Int32Pointer param_1) {
            long tmp_0 = This == null ? 0 : This.longLockPointer();
            long tmp_1 = param_1 == null ? 0 : param_1.longLockPointer();
            int tmp_ret = instance.proxycall155(get_GetLOD(), tmp_0, tmp_1);
            if (This != null) {
                This.unlock();
            }
            if (param_1 != null) {
                param_1.unlock();
            }
            return tmp_ret;
        }
        @Override
        public int size() {
            return sizeof;
        }
    }

    public final IDirectDrawSurface7Vtbl createIDirectDrawSurface7Vtbl(boolean direct) {
        return new IDirectDrawSurface7Vtbl(direct);
    }
    public final IDirectDrawSurface7Vtbl createIDirectDrawSurface7Vtbl(VoidPointer base) {
        return new IDirectDrawSurface7Vtbl(base);
    }
    public final IDirectDrawSurface7Vtbl createIDirectDrawSurface7Vtbl(long addr) {
        return new IDirectDrawSurface7Vtbl(addr);
    }


    public static class DDCOLORKEY extends CommonStructWrapper {

        public static final int sizeof = 8;

        DDCOLORKEY(boolean direct) {
            super(sizeof, direct);
        }
        DDCOLORKEY(VoidPointer base) {
            super(base);
        }
        DDCOLORKEY(long addr) {
            super(addr);
        }
        public final void set_dwColorSpaceLowValue(int val) {
            byteBase.setInt32(0, val);
        }
        public final int get_dwColorSpaceLowValue() {
            return byteBase.getInt32(0);
        }
        public final void set_dwColorSpaceHighValue(int val) {
            byteBase.setInt32(4, val);
        }
        public final int get_dwColorSpaceHighValue() {
            return byteBase.getInt32(4);
        }
        @Override
        public int size() {
            return sizeof;
        }
    }

    public final DDCOLORKEY createDDCOLORKEY(boolean direct) {
        return new DDCOLORKEY(direct);
    }
    public final DDCOLORKEY createDDCOLORKEY(VoidPointer base) {
        return new DDCOLORKEY(base);
    }
    public final DDCOLORKEY createDDCOLORKEY(long addr) {
        return new DDCOLORKEY(addr);
    }


    public static class DDBLTBATCH extends CommonStructWrapper {

        public static final int sizeof = NativeBridge.is64 ? 40 : 20;

        DDBLTBATCH(boolean direct) {
            super(sizeof, direct);
        }
        DDBLTBATCH(VoidPointer base) {
            super(base);
        }
        DDBLTBATCH(long addr) {
            super(addr);
        }
        public final Win32.RECT get_lprDest() {
            return Win32.instance.createRECT(byteBase.getAddress(0));
        }
        public final Win32.IDirectDrawSurface get_lpDDSSrc() {
            return Win32.instance.createIDirectDrawSurface(byteBase.getAddress(NativeBridge.is64 ? 8 : 4));
        }
        public final Win32.RECT get_lprSrc() {
            return Win32.instance.createRECT(byteBase.getAddress(NativeBridge.is64 ? 16 : 8));
        }
        public final void set_dwFlags(int val) {
            byteBase.setInt32(NativeBridge.is64 ? 24 : 12, val);
        }
        public final int get_dwFlags() {
            return byteBase.getInt32(NativeBridge.is64 ? 24 : 12);
        }
        public final Win32.DDBLTFX get_lpDDBltFx() {
            return Win32.instance.createDDBLTFX(byteBase.getAddress(NativeBridge.is64 ? 32 : 16));
        }
        @Override
        public int size() {
            return sizeof;
        }
    }

    public final DDBLTBATCH createDDBLTBATCH(boolean direct) {
        return new DDBLTBATCH(direct);
    }
    public final DDBLTBATCH createDDBLTBATCH(VoidPointer base) {
        return new DDBLTBATCH(base);
    }
    public final DDBLTBATCH createDDBLTBATCH(long addr) {
        return new DDBLTBATCH(addr);
    }


    public static class DDSCAPS extends CommonStructWrapper {

        public static final int sizeof = 4;

        DDSCAPS(boolean direct) {
            super(sizeof, direct);
        }
        DDSCAPS(VoidPointer base) {
            super(base);
        }
        DDSCAPS(long addr) {
            super(addr);
        }
        public final void set_dwCaps(int val) {
            byteBase.setInt32(0, val);
        }
        public final int get_dwCaps() {
            return byteBase.getInt32(0);
        }
        @Override
        public int size() {
            return sizeof;
        }
    }

    public final DDSCAPS createDDSCAPS(boolean direct) {
        return new DDSCAPS(direct);
    }
    public final DDSCAPS createDDSCAPS(VoidPointer base) {
        return new DDSCAPS(base);
    }
    public final DDSCAPS createDDSCAPS(long addr) {
        return new DDSCAPS(addr);
    }


    public static class LARGE_INTEGER extends CommonStructWrapper {

        public static final int sizeof = 8;

        LARGE_INTEGER(boolean direct) {
            super(sizeof, direct);
        }
        LARGE_INTEGER(VoidPointer base) {
            super(base);
        }
        LARGE_INTEGER(long addr) {
            super(addr);
        }
        public final void set_LowPart(int val) {
            byteBase.setInt32(0, val);
        }
        public final int get_LowPart() {
            return byteBase.getInt32(0);
        }
        public final void set_HighPart(int val) {
            byteBase.setInt32(4, val);
        }
        public final int get_HighPart() {
            return byteBase.getInt32(4);
        }
        public final void set_u_LowPart(int val) {
            byteBase.setInt32(0, val);
        }
        public final int get_u_LowPart() {
            return byteBase.getInt32(0);
        }
        public final void set_u_HighPart(int val) {
            byteBase.setInt32(4, val);
        }
        public final int get_u_HighPart() {
            return byteBase.getInt32(4);
        }
        public final void set_QuadPart(long val) {
            byteBase.setInt64(0, val);
        }
        public final long get_QuadPart() {
            return byteBase.getInt64(0);
        }
        @Override
        public int size() {
            return sizeof;
        }
    }

    public final LARGE_INTEGER createLARGE_INTEGER(boolean direct) {
        return new LARGE_INTEGER(direct);
    }
    public final LARGE_INTEGER createLARGE_INTEGER(VoidPointer base) {
        return new LARGE_INTEGER(base);
    }
    public final LARGE_INTEGER createLARGE_INTEGER(long addr) {
        return new LARGE_INTEGER(addr);
    }


    public static class IDirectDrawSurfaceVtbl extends CommonStructWrapper {

        public static final int sizeof = NativeBridge.is64 ? 288 : 144;

        IDirectDrawSurfaceVtbl(boolean direct) {
            super(sizeof, direct);
        }
        IDirectDrawSurfaceVtbl(VoidPointer base) {
            super(base);
        }
        IDirectDrawSurfaceVtbl(long addr) {
            super(addr);
        }
        public final void set_QueryInterface(long val) {
            byteBase.setAddress(0, val);
        }
        public final long get_QueryInterface() {
            return byteBase.getAddress(0);
        }
        public final int QueryInterface(Win32.IDirectDrawSurface This, Win32.GUID riid, PointerPointer ppvObj) {
            long tmp_0 = This == null ? 0 : This.longLockPointer();
            long tmp_1 = riid == null ? 0 : riid.longLockPointer();
            long tmp_2 = ppvObj == null ? 0 : ppvObj.longLockPointer();
            int tmp_ret = instance.proxycall156(get_QueryInterface(), tmp_0, tmp_1, tmp_2);
            if (This != null) {
                This.unlock();
            }
            if (riid != null) {
                riid.unlock();
            }
            if (ppvObj != null) {
                ppvObj.unlock();
            }
            return tmp_ret;
        }
        public final void set_AddRef(long val) {
            byteBase.setAddress(NativeBridge.is64 ? 8 : 4, val);
        }
        public final long get_AddRef() {
            return byteBase.getAddress(NativeBridge.is64 ? 8 : 4);
        }
        public final int AddRef(Win32.IDirectDrawSurface This) {
            long tmp_0 = This == null ? 0 : This.longLockPointer();
            int tmp_ret = instance.proxycall157(get_AddRef(), tmp_0);
            if (This != null) {
                This.unlock();
            }
            return tmp_ret;
        }
        public final void set_Release(long val) {
            byteBase.setAddress(NativeBridge.is64 ? 16 : 8, val);
        }
        public final long get_Release() {
            return byteBase.getAddress(NativeBridge.is64 ? 16 : 8);
        }
        public final int Release(Win32.IDirectDrawSurface This) {
            long tmp_0 = This == null ? 0 : This.longLockPointer();
            int tmp_ret = instance.proxycall158(get_Release(), tmp_0);
            if (This != null) {
                This.unlock();
            }
            return tmp_ret;
        }
        public final void set_AddAttachedSurface(long val) {
            byteBase.setAddress(NativeBridge.is64 ? 24 : 12, val);
        }
        public final long get_AddAttachedSurface() {
            return byteBase.getAddress(NativeBridge.is64 ? 24 : 12);
        }
        public final int AddAttachedSurface(Win32.IDirectDrawSurface This, Win32.IDirectDrawSurface param_1) {
            long tmp_0 = This == null ? 0 : This.longLockPointer();
            long tmp_1 = param_1 == null ? 0 : param_1.longLockPointer();
            int tmp_ret = instance.proxycall159(get_AddAttachedSurface(), tmp_0, tmp_1);
            if (This != null) {
                This.unlock();
            }
            if (param_1 != null) {
                param_1.unlock();
            }
            return tmp_ret;
        }
        public final void set_AddOverlayDirtyRect(long val) {
            byteBase.setAddress(NativeBridge.is64 ? 32 : 16, val);
        }
        public final long get_AddOverlayDirtyRect() {
            return byteBase.getAddress(NativeBridge.is64 ? 32 : 16);
        }
        public final int AddOverlayDirtyRect(Win32.IDirectDrawSurface This, Win32.RECT param_1) {
            long tmp_0 = This == null ? 0 : This.longLockPointer();
            long tmp_1 = param_1 == null ? 0 : param_1.longLockPointer();
            int tmp_ret = instance.proxycall160(get_AddOverlayDirtyRect(), tmp_0, tmp_1);
            if (This != null) {
                This.unlock();
            }
            if (param_1 != null) {
                param_1.unlock();
            }
            return tmp_ret;
        }
        public final void set_Blt(long val) {
            byteBase.setAddress(NativeBridge.is64 ? 40 : 20, val);
        }
        public final long get_Blt() {
            return byteBase.getAddress(NativeBridge.is64 ? 40 : 20);
        }
        public final int Blt(Win32.IDirectDrawSurface This, Win32.RECT param_1, Win32.IDirectDrawSurface param_2, Win32.RECT param_3, int param_4, Win32.DDBLTFX param_5) {
            long tmp_0 = This == null ? 0 : This.longLockPointer();
            long tmp_1 = param_1 == null ? 0 : param_1.longLockPointer();
            long tmp_2 = param_2 == null ? 0 : param_2.longLockPointer();
            long tmp_3 = param_3 == null ? 0 : param_3.longLockPointer();
            long tmp_4 = param_5 == null ? 0 : param_5.longLockPointer();
            int tmp_ret = instance.proxycall161(get_Blt(), tmp_0, tmp_1, tmp_2, tmp_3, param_4, tmp_4);
            if (This != null) {
                This.unlock();
            }
            if (param_1 != null) {
                param_1.unlock();
            }
            if (param_2 != null) {
                param_2.unlock();
            }
            if (param_3 != null) {
                param_3.unlock();
            }
            if (param_5 != null) {
                param_5.unlock();
            }
            return tmp_ret;
        }
        public final void set_BltBatch(long val) {
            byteBase.setAddress(NativeBridge.is64 ? 48 : 24, val);
        }
        public final long get_BltBatch() {
            return byteBase.getAddress(NativeBridge.is64 ? 48 : 24);
        }
        public final int BltBatch(Win32.IDirectDrawSurface This, Win32.DDBLTBATCH param_1, int param_2, int param_3) {
            long tmp_0 = This == null ? 0 : This.longLockPointer();
            long tmp_1 = param_1 == null ? 0 : param_1.longLockPointer();
            int tmp_ret = instance.proxycall162(get_BltBatch(), tmp_0, tmp_1, param_2, param_3);
            if (This != null) {
                This.unlock();
            }
            if (param_1 != null) {
                param_1.unlock();
            }
            return tmp_ret;
        }
        public final void set_BltFast(long val) {
            byteBase.setAddress(NativeBridge.is64 ? 56 : 28, val);
        }
        public final long get_BltFast() {
            return byteBase.getAddress(NativeBridge.is64 ? 56 : 28);
        }
        public final int BltFast(Win32.IDirectDrawSurface This, int param_1, int param_2, Win32.IDirectDrawSurface param_3, Win32.RECT param_4, int param_5) {
            long tmp_0 = This == null ? 0 : This.longLockPointer();
            long tmp_1 = param_3 == null ? 0 : param_3.longLockPointer();
            long tmp_2 = param_4 == null ? 0 : param_4.longLockPointer();
            int tmp_ret = instance.proxycall163(get_BltFast(), tmp_0, param_1, param_2, tmp_1, tmp_2, param_5);
            if (This != null) {
                This.unlock();
            }
            if (param_3 != null) {
                param_3.unlock();
            }
            if (param_4 != null) {
                param_4.unlock();
            }
            return tmp_ret;
        }
        public final void set_DeleteAttachedSurface(long val) {
            byteBase.setAddress(NativeBridge.is64 ? 64 : 32, val);
        }
        public final long get_DeleteAttachedSurface() {
            return byteBase.getAddress(NativeBridge.is64 ? 64 : 32);
        }
        public final int DeleteAttachedSurface(Win32.IDirectDrawSurface This, int param_1, Win32.IDirectDrawSurface param_2) {
            long tmp_0 = This == null ? 0 : This.longLockPointer();
            long tmp_1 = param_2 == null ? 0 : param_2.longLockPointer();
            int tmp_ret = instance.proxycall164(get_DeleteAttachedSurface(), tmp_0, param_1, tmp_1);
            if (This != null) {
                This.unlock();
            }
            if (param_2 != null) {
                param_2.unlock();
            }
            return tmp_ret;
        }
        public final void set_EnumAttachedSurfaces(long val) {
            byteBase.setAddress(NativeBridge.is64 ? 72 : 36, val);
        }
        public final long get_EnumAttachedSurfaces() {
            return byteBase.getAddress(NativeBridge.is64 ? 72 : 36);
        }
        public final int EnumAttachedSurfaces(Win32.IDirectDrawSurface This, VoidPointer param_1, long param_2) {
            long tmp_0 = This == null ? 0 : This.longLockPointer();
            long tmp_1 = param_1 == null ? 0 : param_1.longLockPointer();
            int tmp_ret = instance.proxycall165(get_EnumAttachedSurfaces(), tmp_0, tmp_1, param_2);
            if (This != null) {
                This.unlock();
            }
            if (param_1 != null) {
                param_1.unlock();
            }
            return tmp_ret;
        }
        public final void set_EnumOverlayZOrders(long val) {
            byteBase.setAddress(NativeBridge.is64 ? 80 : 40, val);
        }
        public final long get_EnumOverlayZOrders() {
            return byteBase.getAddress(NativeBridge.is64 ? 80 : 40);
        }
        public final int EnumOverlayZOrders(Win32.IDirectDrawSurface This, int param_1, VoidPointer param_2, long param_3) {
            long tmp_0 = This == null ? 0 : This.longLockPointer();
            long tmp_1 = param_2 == null ? 0 : param_2.longLockPointer();
            int tmp_ret = instance.proxycall166(get_EnumOverlayZOrders(), tmp_0, param_1, tmp_1, param_3);
            if (This != null) {
                This.unlock();
            }
            if (param_2 != null) {
                param_2.unlock();
            }
            return tmp_ret;
        }
        public final void set_Flip(long val) {
            byteBase.setAddress(NativeBridge.is64 ? 88 : 44, val);
        }
        public final long get_Flip() {
            return byteBase.getAddress(NativeBridge.is64 ? 88 : 44);
        }
        public final int Flip(Win32.IDirectDrawSurface This, Win32.IDirectDrawSurface param_1, int param_2) {
            long tmp_0 = This == null ? 0 : This.longLockPointer();
            long tmp_1 = param_1 == null ? 0 : param_1.longLockPointer();
            int tmp_ret = instance.proxycall167(get_Flip(), tmp_0, tmp_1, param_2);
            if (This != null) {
                This.unlock();
            }
            if (param_1 != null) {
                param_1.unlock();
            }
            return tmp_ret;
        }
        public final void set_GetAttachedSurface(long val) {
            byteBase.setAddress(NativeBridge.is64 ? 96 : 48, val);
        }
        public final long get_GetAttachedSurface() {
            return byteBase.getAddress(NativeBridge.is64 ? 96 : 48);
        }
        public final int GetAttachedSurface(Win32.IDirectDrawSurface This, Win32.DDSCAPS param_1, PointerPointer param_2) {
            long tmp_0 = This == null ? 0 : This.longLockPointer();
            long tmp_1 = param_1 == null ? 0 : param_1.longLockPointer();
            long tmp_2 = param_2 == null ? 0 : param_2.longLockPointer();
            int tmp_ret = instance.proxycall168(get_GetAttachedSurface(), tmp_0, tmp_1, tmp_2);
            if (This != null) {
                This.unlock();
            }
            if (param_1 != null) {
                param_1.unlock();
            }
            if (param_2 != null) {
                param_2.unlock();
            }
            return tmp_ret;
        }
        public final void set_GetBltStatus(long val) {
            byteBase.setAddress(NativeBridge.is64 ? 104 : 52, val);
        }
        public final long get_GetBltStatus() {
            return byteBase.getAddress(NativeBridge.is64 ? 104 : 52);
        }
        public final int GetBltStatus(Win32.IDirectDrawSurface This, int param_1) {
            long tmp_0 = This == null ? 0 : This.longLockPointer();
            int tmp_ret = instance.proxycall169(get_GetBltStatus(), tmp_0, param_1);
            if (This != null) {
                This.unlock();
            }
            return tmp_ret;
        }
        public final void set_GetCaps(long val) {
            byteBase.setAddress(NativeBridge.is64 ? 112 : 56, val);
        }
        public final long get_GetCaps() {
            return byteBase.getAddress(NativeBridge.is64 ? 112 : 56);
        }
        public final int GetCaps(Win32.IDirectDrawSurface This, Win32.DDSCAPS param_1) {
            long tmp_0 = This == null ? 0 : This.longLockPointer();
            long tmp_1 = param_1 == null ? 0 : param_1.longLockPointer();
            int tmp_ret = instance.proxycall170(get_GetCaps(), tmp_0, tmp_1);
            if (This != null) {
                This.unlock();
            }
            if (param_1 != null) {
                param_1.unlock();
            }
            return tmp_ret;
        }
        public final void set_GetClipper(long val) {
            byteBase.setAddress(NativeBridge.is64 ? 120 : 60, val);
        }
        public final long get_GetClipper() {
            return byteBase.getAddress(NativeBridge.is64 ? 120 : 60);
        }
        public final int GetClipper(Win32.IDirectDrawSurface This, PointerPointer param_1) {
            long tmp_0 = This == null ? 0 : This.longLockPointer();
            long tmp_1 = param_1 == null ? 0 : param_1.longLockPointer();
            int tmp_ret = instance.proxycall171(get_GetClipper(), tmp_0, tmp_1);
            if (This != null) {
                This.unlock();
            }
            if (param_1 != null) {
                param_1.unlock();
            }
            return tmp_ret;
        }
        public final void set_GetColorKey(long val) {
            byteBase.setAddress(NativeBridge.is64 ? 128 : 64, val);
        }
        public final long get_GetColorKey() {
            return byteBase.getAddress(NativeBridge.is64 ? 128 : 64);
        }
        public final int GetColorKey(Win32.IDirectDrawSurface This, int param_1, Win32.DDCOLORKEY param_2) {
            long tmp_0 = This == null ? 0 : This.longLockPointer();
            long tmp_1 = param_2 == null ? 0 : param_2.longLockPointer();
            int tmp_ret = instance.proxycall172(get_GetColorKey(), tmp_0, param_1, tmp_1);
            if (This != null) {
                This.unlock();
            }
            if (param_2 != null) {
                param_2.unlock();
            }
            return tmp_ret;
        }
        public final void set_GetDC(long val) {
            byteBase.setAddress(NativeBridge.is64 ? 136 : 68, val);
        }
        public final long get_GetDC() {
            return byteBase.getAddress(NativeBridge.is64 ? 136 : 68);
        }
        public final int GetDC(Win32.IDirectDrawSurface This, PointerPointer param_1) {
            long tmp_0 = This == null ? 0 : This.longLockPointer();
            long tmp_1 = param_1 == null ? 0 : param_1.longLockPointer();
            int tmp_ret = instance.proxycall173(get_GetDC(), tmp_0, tmp_1);
            if (This != null) {
                This.unlock();
            }
            if (param_1 != null) {
                param_1.unlock();
            }
            return tmp_ret;
        }
        public final void set_GetFlipStatus(long val) {
            byteBase.setAddress(NativeBridge.is64 ? 144 : 72, val);
        }
        public final long get_GetFlipStatus() {
            return byteBase.getAddress(NativeBridge.is64 ? 144 : 72);
        }
        public final int GetFlipStatus(Win32.IDirectDrawSurface This, int param_1) {
            long tmp_0 = This == null ? 0 : This.longLockPointer();
            int tmp_ret = instance.proxycall174(get_GetFlipStatus(), tmp_0, param_1);
            if (This != null) {
                This.unlock();
            }
            return tmp_ret;
        }
        public final void set_GetOverlayPosition(long val) {
            byteBase.setAddress(NativeBridge.is64 ? 152 : 76, val);
        }
        public final long get_GetOverlayPosition() {
            return byteBase.getAddress(NativeBridge.is64 ? 152 : 76);
        }
        public final int GetOverlayPosition(Win32.IDirectDrawSurface This, Int32Pointer param_1, Int32Pointer param_2) {
            long tmp_0 = This == null ? 0 : This.longLockPointer();
            long tmp_1 = param_1 == null ? 0 : param_1.longLockPointer();
            long tmp_2 = param_2 == null ? 0 : param_2.longLockPointer();
            int tmp_ret = instance.proxycall175(get_GetOverlayPosition(), tmp_0, tmp_1, tmp_2);
            if (This != null) {
                This.unlock();
            }
            if (param_1 != null) {
                param_1.unlock();
            }
            if (param_2 != null) {
                param_2.unlock();
            }
            return tmp_ret;
        }
        public final void set_GetPalette(long val) {
            byteBase.setAddress(NativeBridge.is64 ? 160 : 80, val);
        }
        public final long get_GetPalette() {
            return byteBase.getAddress(NativeBridge.is64 ? 160 : 80);
        }
        public final int GetPalette(Win32.IDirectDrawSurface This, PointerPointer param_1) {
            long tmp_0 = This == null ? 0 : This.longLockPointer();
            long tmp_1 = param_1 == null ? 0 : param_1.longLockPointer();
            int tmp_ret = instance.proxycall176(get_GetPalette(), tmp_0, tmp_1);
            if (This != null) {
                This.unlock();
            }
            if (param_1 != null) {
                param_1.unlock();
            }
            return tmp_ret;
        }
        public final void set_GetPixelFormat(long val) {
            byteBase.setAddress(NativeBridge.is64 ? 168 : 84, val);
        }
        public final long get_GetPixelFormat() {
            return byteBase.getAddress(NativeBridge.is64 ? 168 : 84);
        }
        public final int GetPixelFormat(Win32.IDirectDrawSurface This, Win32.DDPIXELFORMAT param_1) {
            long tmp_0 = This == null ? 0 : This.longLockPointer();
            long tmp_1 = param_1 == null ? 0 : param_1.longLockPointer();
            int tmp_ret = instance.proxycall177(get_GetPixelFormat(), tmp_0, tmp_1);
            if (This != null) {
                This.unlock();
            }
            if (param_1 != null) {
                param_1.unlock();
            }
            return tmp_ret;
        }
        public final void set_GetSurfaceDesc(long val) {
            byteBase.setAddress(NativeBridge.is64 ? 176 : 88, val);
        }
        public final long get_GetSurfaceDesc() {
            return byteBase.getAddress(NativeBridge.is64 ? 176 : 88);
        }
        public final int GetSurfaceDesc(Win32.IDirectDrawSurface This, Win32.DDSURFACEDESC param_1) {
            long tmp_0 = This == null ? 0 : This.longLockPointer();
            long tmp_1 = param_1 == null ? 0 : param_1.longLockPointer();
            int tmp_ret = instance.proxycall178(get_GetSurfaceDesc(), tmp_0, tmp_1);
            if (This != null) {
                This.unlock();
            }
            if (param_1 != null) {
                param_1.unlock();
            }
            return tmp_ret;
        }
        public final void set_Initialize(long val) {
            byteBase.setAddress(NativeBridge.is64 ? 184 : 92, val);
        }
        public final long get_Initialize() {
            return byteBase.getAddress(NativeBridge.is64 ? 184 : 92);
        }
        public final int Initialize(Win32.IDirectDrawSurface This, Win32.IDirectDraw param_1, Win32.DDSURFACEDESC param_2) {
            long tmp_0 = This == null ? 0 : This.longLockPointer();
            long tmp_1 = param_1 == null ? 0 : param_1.longLockPointer();
            long tmp_2 = param_2 == null ? 0 : param_2.longLockPointer();
            int tmp_ret = instance.proxycall179(get_Initialize(), tmp_0, tmp_1, tmp_2);
            if (This != null) {
                This.unlock();
            }
            if (param_1 != null) {
                param_1.unlock();
            }
            if (param_2 != null) {
                param_2.unlock();
            }
            return tmp_ret;
        }
        public final void set_IsLost(long val) {
            byteBase.setAddress(NativeBridge.is64 ? 192 : 96, val);
        }
        public final long get_IsLost() {
            return byteBase.getAddress(NativeBridge.is64 ? 192 : 96);
        }
        public final int IsLost(Win32.IDirectDrawSurface This) {
            long tmp_0 = This == null ? 0 : This.longLockPointer();
            int tmp_ret = instance.proxycall180(get_IsLost(), tmp_0);
            if (This != null) {
                This.unlock();
            }
            return tmp_ret;
        }
        public final void set_Lock(long val) {
            byteBase.setAddress(NativeBridge.is64 ? 200 : 100, val);
        }
        public final long get_Lock() {
            return byteBase.getAddress(NativeBridge.is64 ? 200 : 100);
        }
        public final int Lock(Win32.IDirectDrawSurface This, Win32.RECT param_1, Win32.DDSURFACEDESC param_2, int param_3, VoidPointer param_4) {
            long tmp_0 = This == null ? 0 : This.longLockPointer();
            long tmp_1 = param_1 == null ? 0 : param_1.longLockPointer();
            long tmp_2 = param_2 == null ? 0 : param_2.longLockPointer();
            long tmp_3 = param_4 == null ? 0 : param_4.longLockPointer();
            int tmp_ret = instance.proxycall181(get_Lock(), tmp_0, tmp_1, tmp_2, param_3, tmp_3);
            if (This != null) {
                This.unlock();
            }
            if (param_1 != null) {
                param_1.unlock();
            }
            if (param_2 != null) {
                param_2.unlock();
            }
            if (param_4 != null) {
                param_4.unlock();
            }
            return tmp_ret;
        }
        public final void set_ReleaseDC(long val) {
            byteBase.setAddress(NativeBridge.is64 ? 208 : 104, val);
        }
        public final long get_ReleaseDC() {
            return byteBase.getAddress(NativeBridge.is64 ? 208 : 104);
        }
        public final int ReleaseDC(Win32.IDirectDrawSurface This, long param_1) {
            long tmp_0 = This == null ? 0 : This.longLockPointer();
            int tmp_ret = instance.proxycall182(get_ReleaseDC(), tmp_0, param_1);
            if (This != null) {
                This.unlock();
            }
            return tmp_ret;
        }
        public final void set_Restore(long val) {
            byteBase.setAddress(NativeBridge.is64 ? 216 : 108, val);
        }
        public final long get_Restore() {
            return byteBase.getAddress(NativeBridge.is64 ? 216 : 108);
        }
        public final int Restore(Win32.IDirectDrawSurface This) {
            long tmp_0 = This == null ? 0 : This.longLockPointer();
            int tmp_ret = instance.proxycall183(get_Restore(), tmp_0);
            if (This != null) {
                This.unlock();
            }
            return tmp_ret;
        }
        public final void set_SetClipper(long val) {
            byteBase.setAddress(NativeBridge.is64 ? 224 : 112, val);
        }
        public final long get_SetClipper() {
            return byteBase.getAddress(NativeBridge.is64 ? 224 : 112);
        }
        public final int SetClipper(Win32.IDirectDrawSurface This, Win32.IDirectDrawClipper param_1) {
            long tmp_0 = This == null ? 0 : This.longLockPointer();
            long tmp_1 = param_1 == null ? 0 : param_1.longLockPointer();
            int tmp_ret = instance.proxycall184(get_SetClipper(), tmp_0, tmp_1);
            if (This != null) {
                This.unlock();
            }
            if (param_1 != null) {
                param_1.unlock();
            }
            return tmp_ret;
        }
        public final void set_SetColorKey(long val) {
            byteBase.setAddress(NativeBridge.is64 ? 232 : 116, val);
        }
        public final long get_SetColorKey() {
            return byteBase.getAddress(NativeBridge.is64 ? 232 : 116);
        }
        public final int SetColorKey(Win32.IDirectDrawSurface This, int param_1, Win32.DDCOLORKEY param_2) {
            long tmp_0 = This == null ? 0 : This.longLockPointer();
            long tmp_1 = param_2 == null ? 0 : param_2.longLockPointer();
            int tmp_ret = instance.proxycall185(get_SetColorKey(), tmp_0, param_1, tmp_1);
            if (This != null) {
                This.unlock();
            }
            if (param_2 != null) {
                param_2.unlock();
            }
            return tmp_ret;
        }
        public final void set_SetOverlayPosition(long val) {
            byteBase.setAddress(NativeBridge.is64 ? 240 : 120, val);
        }
        public final long get_SetOverlayPosition() {
            return byteBase.getAddress(NativeBridge.is64 ? 240 : 120);
        }
        public final int SetOverlayPosition(Win32.IDirectDrawSurface This, int param_1, int param_2) {
            long tmp_0 = This == null ? 0 : This.longLockPointer();
            int tmp_ret = instance.proxycall186(get_SetOverlayPosition(), tmp_0, param_1, param_2);
            if (This != null) {
                This.unlock();
            }
            return tmp_ret;
        }
        public final void set_SetPalette(long val) {
            byteBase.setAddress(NativeBridge.is64 ? 248 : 124, val);
        }
        public final long get_SetPalette() {
            return byteBase.getAddress(NativeBridge.is64 ? 248 : 124);
        }
        public final int SetPalette(Win32.IDirectDrawSurface This, Win32.IDirectDrawPalette param_1) {
            long tmp_0 = This == null ? 0 : This.longLockPointer();
            long tmp_1 = param_1 == null ? 0 : param_1.longLockPointer();
            int tmp_ret = instance.proxycall187(get_SetPalette(), tmp_0, tmp_1);
            if (This != null) {
                This.unlock();
            }
            if (param_1 != null) {
                param_1.unlock();
            }
            return tmp_ret;
        }
        public final void set_Unlock(long val) {
            byteBase.setAddress(NativeBridge.is64 ? 256 : 128, val);
        }
        public final long get_Unlock() {
            return byteBase.getAddress(NativeBridge.is64 ? 256 : 128);
        }
        public final int Unlock(Win32.IDirectDrawSurface This, VoidPointer param_1) {
            long tmp_0 = This == null ? 0 : This.longLockPointer();
            long tmp_1 = param_1 == null ? 0 : param_1.longLockPointer();
            int tmp_ret = instance.proxycall188(get_Unlock(), tmp_0, tmp_1);
            if (This != null) {
                This.unlock();
            }
            if (param_1 != null) {
                param_1.unlock();
            }
            return tmp_ret;
        }
        public final void set_UpdateOverlay(long val) {
            byteBase.setAddress(NativeBridge.is64 ? 264 : 132, val);
        }
        public final long get_UpdateOverlay() {
            return byteBase.getAddress(NativeBridge.is64 ? 264 : 132);
        }
        public final int UpdateOverlay(Win32.IDirectDrawSurface This, Win32.RECT param_1, Win32.IDirectDrawSurface param_2, Win32.RECT param_3, int param_4, Win32.DDOVERLAYFX param_5) {
            long tmp_0 = This == null ? 0 : This.longLockPointer();
            long tmp_1 = param_1 == null ? 0 : param_1.longLockPointer();
            long tmp_2 = param_2 == null ? 0 : param_2.longLockPointer();
            long tmp_3 = param_3 == null ? 0 : param_3.longLockPointer();
            long tmp_4 = param_5 == null ? 0 : param_5.longLockPointer();
            int tmp_ret = instance.proxycall189(get_UpdateOverlay(), tmp_0, tmp_1, tmp_2, tmp_3, param_4, tmp_4);
            if (This != null) {
                This.unlock();
            }
            if (param_1 != null) {
                param_1.unlock();
            }
            if (param_2 != null) {
                param_2.unlock();
            }
            if (param_3 != null) {
                param_3.unlock();
            }
            if (param_5 != null) {
                param_5.unlock();
            }
            return tmp_ret;
        }
        public final void set_UpdateOverlayDisplay(long val) {
            byteBase.setAddress(NativeBridge.is64 ? 272 : 136, val);
        }
        public final long get_UpdateOverlayDisplay() {
            return byteBase.getAddress(NativeBridge.is64 ? 272 : 136);
        }
        public final int UpdateOverlayDisplay(Win32.IDirectDrawSurface This, int param_1) {
            long tmp_0 = This == null ? 0 : This.longLockPointer();
            int tmp_ret = instance.proxycall190(get_UpdateOverlayDisplay(), tmp_0, param_1);
            if (This != null) {
                This.unlock();
            }
            return tmp_ret;
        }
        public final void set_UpdateOverlayZOrder(long val) {
            byteBase.setAddress(NativeBridge.is64 ? 280 : 140, val);
        }
        public final long get_UpdateOverlayZOrder() {
            return byteBase.getAddress(NativeBridge.is64 ? 280 : 140);
        }
        public final int UpdateOverlayZOrder(Win32.IDirectDrawSurface This, int param_1, Win32.IDirectDrawSurface param_2) {
            long tmp_0 = This == null ? 0 : This.longLockPointer();
            long tmp_1 = param_2 == null ? 0 : param_2.longLockPointer();
            int tmp_ret = instance.proxycall191(get_UpdateOverlayZOrder(), tmp_0, param_1, tmp_1);
            if (This != null) {
                This.unlock();
            }
            if (param_2 != null) {
                param_2.unlock();
            }
            return tmp_ret;
        }
        @Override
        public int size() {
            return sizeof;
        }
    }

    public final IDirectDrawSurfaceVtbl createIDirectDrawSurfaceVtbl(boolean direct) {
        return new IDirectDrawSurfaceVtbl(direct);
    }
    public final IDirectDrawSurfaceVtbl createIDirectDrawSurfaceVtbl(VoidPointer base) {
        return new IDirectDrawSurfaceVtbl(base);
    }
    public final IDirectDrawSurfaceVtbl createIDirectDrawSurfaceVtbl(long addr) {
        return new IDirectDrawSurfaceVtbl(addr);
    }

    final native int proxycall31(long fnptr, long This, long riid, long ppvObj);
    final native int proxycall32(long fnptr, long This);
    final native int proxycall33(long fnptr, long This);
    final native int proxycall34(long fnptr, long This, long param_1);
    final native int proxycall35(long fnptr, long This, int param_1, int param_2, int param_3, long param_4);
    final native int proxycall36(long fnptr, long This, long param_1, int param_2, long param_3);
    final native int proxycall37(long fnptr, long This, int param_1, int param_2, int param_3, long param_4);
    final native int proxycall38(long fnptr, long This, long riid, long ppvObj);
    final native int proxycall39(long fnptr, long This);
    final native int proxycall40(long fnptr, long This);
    final native int proxycall41(long fnptr, long This);
    final native int proxycall42(long fnptr, long This, int param_1, long param_2, long param_3);
    final native int proxycall43(long fnptr, long This, int param_1, long param_2, long param_3, long param_4);
    final native int proxycall44(long fnptr, long This, long param_1, long param_2, long param_3);
    final native int proxycall45(long fnptr, long This, long param_1, long param_2);
    final native int proxycall46(long fnptr, long This, int param_1, long param_2, long param_3, long param_4);
    final native int proxycall47(long fnptr, long This, int param_1, long param_2, long param_3, long param_4);
    final native int proxycall48(long fnptr, long This);
    final native int proxycall49(long fnptr, long This, long param_1, long param_2);
    final native int proxycall50(long fnptr, long This, long param_1);
    final native int proxycall51(long fnptr, long This, long param_1, long param_2);
    final native int proxycall52(long fnptr, long This, long param_1);
    final native int proxycall53(long fnptr, long This, long param_1);
    final native int proxycall54(long fnptr, long This, long param_1);
    final native int proxycall55(long fnptr, long This, long param_1);
    final native int proxycall56(long fnptr, long This, long param_1);
    final native int proxycall57(long fnptr, long This);
    final native int proxycall58(long fnptr, long This, long param_1, int param_2);
    final native int proxycall59(long fnptr, long This, int param_1, int param_2, int param_3, int param_4, int param_5);
    final native int proxycall60(long fnptr, long This, int param_1, long param_2);
    final native int proxycall61(long fnptr, long This, long param_1, long param_2, long param_3);
    final native int proxycall62(long fnptr, long This, long param_1, long param_2);
    final native int proxycall63(long fnptr, long This);
    final native int proxycall64(long fnptr, long This);
    final native int proxycall65(long fnptr, long This, long param_1, int param_2);
    final native int proxycall66(long fnptr, long This, long param_1, int param_2, int param_3);
    final native int proxycall67(long fnptr, long This, int param_1, long param_2);
    final native int proxycall68(long fnptr, long This, long riid, long ppvObj);
    final native int proxycall69(long fnptr, long This);
    final native int proxycall70(long fnptr, long This);
    final native int proxycall71(long fnptr, long This, long param_1, long param_2, long param_3);
    final native int proxycall72(long fnptr, long This, long param_1);
    final native int proxycall73(long fnptr, long This, long param_1, int param_2);
    final native int proxycall74(long fnptr, long This, long param_1);
    final native int proxycall75(long fnptr, long This, long param_1, int param_2);
    final native int proxycall76(long fnptr, long This, int param_1, long param_2);
    final native int proxycall77(long fnptr, long This, long riid, long ppvObj);
    final native int proxycall78(long fnptr, long This);
    final native int proxycall79(long fnptr, long This);
    final native int proxycall80(long fnptr, long This);
    final native int proxycall81(long fnptr, long This, int param_1, long param_2, long param_3);
    final native int proxycall82(long fnptr, long This, int param_1, long param_2, long param_3, long param_4);
    final native int proxycall83(long fnptr, long This, long param_1, long param_2, long param_3);
    final native int proxycall84(long fnptr, long This, long param_1, long param_2);
    final native int proxycall85(long fnptr, long This, int param_1, long param_2, long param_3, long param_4);
    final native int proxycall86(long fnptr, long This, int param_1, long param_2, long param_3, long param_4);
    final native int proxycall87(long fnptr, long This);
    final native int proxycall88(long fnptr, long This, long param_1, long param_2);
    final native int proxycall89(long fnptr, long This, long param_1);
    final native int proxycall90(long fnptr, long This, long param_1, long param_2);
    final native int proxycall91(long fnptr, long This, long param_1);
    final native int proxycall92(long fnptr, long This, long param_1);
    final native int proxycall93(long fnptr, long This, long param_1);
    final native int proxycall94(long fnptr, long This, long param_1);
    final native int proxycall95(long fnptr, long This, long param_1);
    final native int proxycall96(long fnptr, long This);
    final native int proxycall97(long fnptr, long This, long param_1, int param_2);
    final native int proxycall98(long fnptr, long This, int param_1, int param_2, int param_3);
    final native int proxycall99(long fnptr, long This, int param_1, long param_2);
    final native int proxycall100(long fnptr, long This, long riid, long ppvObject);
    final native int proxycall101(long fnptr, long This);
    final native int proxycall102(long fnptr, long This);
    final native int proxycall103(long fnptr, long This, int celt, long rgelt, long pceltFetched);
    final native int proxycall104(long fnptr, long This, int celt);
    final native int proxycall105(long fnptr, long This);
    final native int proxycall106(long fnptr, long This, long ppenum);
    final native int proxycall107(long fnptr, long This, long riid, long ppvObj);
    final native int proxycall108(long fnptr, long This);
    final native int proxycall109(long fnptr, long This);
    final native int proxycall110(long fnptr, long This, long param_1);
    final native int proxycall111(long fnptr, long This, long param_1);
    final native int proxycall112(long fnptr, long This, long param_1, long param_2, long param_3, int param_4, long param_5);
    final native int proxycall113(long fnptr, long This, long param_1, int param_2, int param_3);
    final native int proxycall114(long fnptr, long This, int param_1, int param_2, long param_3, long param_4, int param_5);
    final native int proxycall115(long fnptr, long This, int param_1, long param_2);
    final native int proxycall116(long fnptr, long This, long param_1, long param_2);
    final native int proxycall117(long fnptr, long This, int param_1, long param_2, long param_3);
    final native int proxycall118(long fnptr, long This, long param_1, int param_2);
    final native int proxycall119(long fnptr, long This, long param_1, long param_2);
    final native int proxycall120(long fnptr, long This, int param_1);
    final native int proxycall121(long fnptr, long This, long param_1);
    final native int proxycall122(long fnptr, long This, long param_1);
    final native int proxycall123(long fnptr, long This, int param_1, long param_2);
    final native int proxycall124(long fnptr, long This, long param_1);
    final native int proxycall125(long fnptr, long This, int param_1);
    final native int proxycall126(long fnptr, long This, long param_1, long param_2);
    final native int proxycall127(long fnptr, long This, long param_1);
    final native int proxycall128(long fnptr, long This, long param_1);
    final native int proxycall129(long fnptr, long This, long param_1);
    final native int proxycall130(long fnptr, long This, long param_1, long param_2);
    final native int proxycall131(long fnptr, long This);
    final native int proxycall132(long fnptr, long This, long param_1, long param_2, int param_3, long param_4);
    final native int proxycall133(long fnptr, long This, long param_1);
    final native int proxycall134(long fnptr, long This);
    final native int proxycall135(long fnptr, long This, long param_1);
    final native int proxycall136(long fnptr, long This, int param_1, long param_2);
    final native int proxycall137(long fnptr, long This, int param_1, int param_2);
    final native int proxycall138(long fnptr, long This, long param_1);
    final native int proxycall139(long fnptr, long This, long param_1);
    final native int proxycall140(long fnptr, long This, long param_1, long param_2, long param_3, int param_4, long param_5);
    final native int proxycall141(long fnptr, long This, int param_1);
    final native int proxycall142(long fnptr, long This, int param_1, long param_2);
    final native int proxycall143(long fnptr, long This, long param_1);
    final native int proxycall144(long fnptr, long This, int param_1);
    final native int proxycall145(long fnptr, long This, int param_1);
    final native int proxycall146(long fnptr, long This, long param_1, int param_2);
    final native int proxycall147(long fnptr, long This, long param_1, long param_2, int param_3, int param_4);
    final native int proxycall148(long fnptr, long This, long param_1, long param_2, long param_3);
    final native int proxycall149(long fnptr, long This, long param_1);
    final native int proxycall150(long fnptr, long This, long param_1);
    final native int proxycall151(long fnptr, long This);
    final native int proxycall152(long fnptr, long This, int param_1);
    final native int proxycall153(long fnptr, long This, long param_1);
    final native int proxycall154(long fnptr, long This, int param_1);
    final native int proxycall155(long fnptr, long This, long param_1);
    final native int proxycall156(long fnptr, long This, long riid, long ppvObj);
    final native int proxycall157(long fnptr, long This);
    final native int proxycall158(long fnptr, long This);
    final native int proxycall159(long fnptr, long This, long param_1);
    final native int proxycall160(long fnptr, long This, long param_1);
    final native int proxycall161(long fnptr, long This, long param_1, long param_2, long param_3, int param_4, long param_5);
    final native int proxycall162(long fnptr, long This, long param_1, int param_2, int param_3);
    final native int proxycall163(long fnptr, long This, int param_1, int param_2, long param_3, long param_4, int param_5);
    final native int proxycall164(long fnptr, long This, int param_1, long param_2);
    final native int proxycall165(long fnptr, long This, long param_1, long param_2);
    final native int proxycall166(long fnptr, long This, int param_1, long param_2, long param_3);
    final native int proxycall167(long fnptr, long This, long param_1, int param_2);
    final native int proxycall168(long fnptr, long This, long param_1, long param_2);
    final native int proxycall169(long fnptr, long This, int param_1);
    final native int proxycall170(long fnptr, long This, long param_1);
    final native int proxycall171(long fnptr, long This, long param_1);
    final native int proxycall172(long fnptr, long This, int param_1, long param_2);
    final native int proxycall173(long fnptr, long This, long param_1);
    final native int proxycall174(long fnptr, long This, int param_1);
    final native int proxycall175(long fnptr, long This, long param_1, long param_2);
    final native int proxycall176(long fnptr, long This, long param_1);
    final native int proxycall177(long fnptr, long This, long param_1);
    final native int proxycall178(long fnptr, long This, long param_1);
    final native int proxycall179(long fnptr, long This, long param_1, long param_2);
    final native int proxycall180(long fnptr, long This);
    final native int proxycall181(long fnptr, long This, long param_1, long param_2, int param_3, long param_4);
    final native int proxycall182(long fnptr, long This, long param_1);
    final native int proxycall183(long fnptr, long This);
    final native int proxycall184(long fnptr, long This, long param_1);
    final native int proxycall185(long fnptr, long This, int param_1, long param_2);
    final native int proxycall186(long fnptr, long This, int param_1, int param_2);
    final native int proxycall187(long fnptr, long This, long param_1);
    final native int proxycall188(long fnptr, long This, long param_1);
    final native int proxycall189(long fnptr, long This, long param_1, long param_2, long param_3, int param_4, long param_5);
    final native int proxycall190(long fnptr, long This, int param_1);
    final native int proxycall191(long fnptr, long This, int param_1, long param_2);

    public static class LOGFONTW extends CommonStructWrapper {

        public static final int sizeof = 92;

        LOGFONTW(boolean direct) {
            super(sizeof, direct);
        }
        LOGFONTW(VoidPointer base) {
            super(base);
        }
        LOGFONTW(long addr) {
            super(addr);
        }
        public final void set_lfHeight(int val) {
            byteBase.setInt32(0, val);
        }
        public final int get_lfHeight() {
            return byteBase.getInt32(0);
        }
        public final void set_lfWidth(int val) {
            byteBase.setInt32(4, val);
        }
        public final int get_lfWidth() {
            return byteBase.getInt32(4);
        }
        public final void set_lfEscapement(int val) {
            byteBase.setInt32(8, val);
        }
        public final int get_lfEscapement() {
            return byteBase.getInt32(8);
        }
        public final void set_lfOrientation(int val) {
            byteBase.setInt32(12, val);
        }
        public final int get_lfOrientation() {
            return byteBase.getInt32(12);
        }
        public final void set_lfWeight(int val) {
            byteBase.setInt32(16, val);
        }
        public final int get_lfWeight() {
            return byteBase.getInt32(16);
        }
        public final void set_lfItalic(byte val) {
            byteBase.set(20, val);
        }
        public final byte get_lfItalic() {
            return byteBase.get(20);
        }
        public final void set_lfUnderline(byte val) {
            byteBase.set(21, val);
        }
        public final byte get_lfUnderline() {
            return byteBase.get(21);
        }
        public final void set_lfStrikeOut(byte val) {
            byteBase.set(22, val);
        }
        public final byte get_lfStrikeOut() {
            return byteBase.get(22);
        }
        public final void set_lfCharSet(byte val) {
            byteBase.set(23, val);
        }
        public final byte get_lfCharSet() {
            return byteBase.get(23);
        }
        public final void set_lfOutPrecision(byte val) {
            byteBase.set(24, val);
        }
        public final byte get_lfOutPrecision() {
            return byteBase.get(24);
        }
        public final void set_lfClipPrecision(byte val) {
            byteBase.set(25, val);
        }
        public final byte get_lfClipPrecision() {
            return byteBase.get(25);
        }
        public final void set_lfQuality(byte val) {
            byteBase.set(26, val);
        }
        public final byte get_lfQuality() {
            return byteBase.get(26);
        }
        public final void set_lfPitchAndFamily(byte val) {
            byteBase.set(27, val);
        }
        public final byte get_lfPitchAndFamily() {
            return byteBase.get(27);
        }
        public final Int16Pointer get_lfFaceName() {
            return nb.createInt16Pointer(getElementPointer(28));
        }
        @Override
        public int size() {
            return sizeof;
        }
    }

    public final LOGFONTW createLOGFONTW(boolean direct) {
        return new LOGFONTW(direct);
    }
    public final LOGFONTW createLOGFONTW(VoidPointer base) {
        return new LOGFONTW(base);
    }
    public final LOGFONTW createLOGFONTW(long addr) {
        return new LOGFONTW(addr);
    }


    public static class HIGHCONTRASTA extends CommonStructWrapper {

        public static final int sizeof = NativeBridge.is64 ? 16 : 12;

        HIGHCONTRASTA(boolean direct) {
            super(sizeof, direct);
        }
        HIGHCONTRASTA(VoidPointer base) {
            super(base);
        }
        HIGHCONTRASTA(long addr) {
            super(addr);
        }
        public final void set_cbSize(int val) {
            byteBase.setInt32(0, val);
        }
        public final int get_cbSize() {
            return byteBase.getInt32(0);
        }
        public final void set_dwFlags(int val) {
            byteBase.setInt32(4, val);
        }
        public final int get_dwFlags() {
            return byteBase.getInt32(4);
        }
        public final void set_lpszDefaultScheme(Int8Pointer val) {
            byteBase.setPointer(8, val);
        }
        public final Int8Pointer get_lpszDefaultScheme() {
            return nb.createInt8Pointer(byteBase.getAddress(8));
        }
        @Override
        public int size() {
            return sizeof;
        }
    }

    public final HIGHCONTRASTA createHIGHCONTRASTA(boolean direct) {
        return new HIGHCONTRASTA(direct);
    }
    public final HIGHCONTRASTA createHIGHCONTRASTA(VoidPointer base) {
        return new HIGHCONTRASTA(base);
    }
    public final HIGHCONTRASTA createHIGHCONTRASTA(long addr) {
        return new HIGHCONTRASTA(addr);
    }


    public static class OFNOTIFYEXW extends CommonStructWrapper {

        public static final int sizeof = NativeBridge.is64 ? 48 : 24;

        OFNOTIFYEXW(boolean direct) {
            super(sizeof, direct);
        }
        OFNOTIFYEXW(VoidPointer base) {
            super(base);
        }
        OFNOTIFYEXW(long addr) {
            super(addr);
        }
        public final NMHDR get_hdr() {
            return instance.createNMHDR(getElementPointer(0));
        }
        public final Win32.OPENFILENAMEW get_lpOFN() {
            return Win32.instance.createOPENFILENAMEW(byteBase.getAddress(NativeBridge.is64 ? 24 : 12));
        }
        public final void set_psf(VoidPointer val) {
            byteBase.setPointer(NativeBridge.is64 ? 32 : 16, val);
        }
        public final VoidPointer get_psf() {
            return nb.createInt8Pointer(byteBase.getAddress(NativeBridge.is64 ? 32 : 16));
        }
        public final void set_pidl(VoidPointer val) {
            byteBase.setPointer(NativeBridge.is64 ? 40 : 20, val);
        }
        public final VoidPointer get_pidl() {
            return nb.createInt8Pointer(byteBase.getAddress(NativeBridge.is64 ? 40 : 20));
        }
        @Override
        public int size() {
            return sizeof;
        }
    }

    public final OFNOTIFYEXW createOFNOTIFYEXW(boolean direct) {
        return new OFNOTIFYEXW(direct);
    }
    public final OFNOTIFYEXW createOFNOTIFYEXW(VoidPointer base) {
        return new OFNOTIFYEXW(base);
    }
    public final OFNOTIFYEXW createOFNOTIFYEXW(long addr) {
        return new OFNOTIFYEXW(addr);
    }


    public static class ICONMETRICSW extends CommonStructWrapper {

        public static final int sizeof = 108;

        ICONMETRICSW(boolean direct) {
            super(sizeof, direct);
        }
        ICONMETRICSW(VoidPointer base) {
            super(base);
        }
        ICONMETRICSW(long addr) {
            super(addr);
        }
        public final void set_cbSize(int val) {
            byteBase.setInt32(0, val);
        }
        public final int get_cbSize() {
            return byteBase.getInt32(0);
        }
        public final void set_iHorzSpacing(int val) {
            byteBase.setInt32(4, val);
        }
        public final int get_iHorzSpacing() {
            return byteBase.getInt32(4);
        }
        public final void set_iVertSpacing(int val) {
            byteBase.setInt32(8, val);
        }
        public final int get_iVertSpacing() {
            return byteBase.getInt32(8);
        }
        public final void set_iTitleWrap(int val) {
            byteBase.setInt32(12, val);
        }
        public final int get_iTitleWrap() {
            return byteBase.getInt32(12);
        }
        public final Win32.LOGFONTW get_lfFont() {
            return Win32.instance.createLOGFONTW(getElementPointer(16));
        }
        @Override
        public int size() {
            return sizeof;
        }
    }

    public final ICONMETRICSW createICONMETRICSW(boolean direct) {
        return new ICONMETRICSW(direct);
    }
    public final ICONMETRICSW createICONMETRICSW(VoidPointer base) {
        return new ICONMETRICSW(base);
    }
    public final ICONMETRICSW createICONMETRICSW(long addr) {
        return new ICONMETRICSW(addr);
    }


    public static class TTPOLYGONHEADER extends CommonStructWrapper {

        public static final int sizeof = 16;

        TTPOLYGONHEADER(boolean direct) {
            super(sizeof, direct);
        }
        TTPOLYGONHEADER(VoidPointer base) {
            super(base);
        }
        TTPOLYGONHEADER(long addr) {
            super(addr);
        }
        public final void set_cb(int val) {
            byteBase.setInt32(0, val);
        }
        public final int get_cb() {
            return byteBase.getInt32(0);
        }
        public final void set_dwType(int val) {
            byteBase.setInt32(4, val);
        }
        public final int get_dwType() {
            return byteBase.getInt32(4);
        }
        public final POINTFX get_pfxStart() {
            return instance.createPOINTFX(getElementPointer(8));
        }
        @Override
        public int size() {
            return sizeof;
        }
    }

    public final TTPOLYGONHEADER createTTPOLYGONHEADER(boolean direct) {
        return new TTPOLYGONHEADER(direct);
    }
    public final TTPOLYGONHEADER createTTPOLYGONHEADER(VoidPointer base) {
        return new TTPOLYGONHEADER(base);
    }
    public final TTPOLYGONHEADER createTTPOLYGONHEADER(long addr) {
        return new TTPOLYGONHEADER(addr);
    }


    public static class NONCLIENTMETRICSW extends CommonStructWrapper {

        public static final int sizeof = 500;

        NONCLIENTMETRICSW(boolean direct) {
            super(sizeof, direct);
        }
        NONCLIENTMETRICSW(VoidPointer base) {
            super(base);
        }
        NONCLIENTMETRICSW(long addr) {
            super(addr);
        }
        public final void set_cbSize(int val) {
            byteBase.setInt32(0, val);
        }
        public final int get_cbSize() {
            return byteBase.getInt32(0);
        }
        public final void set_iBorderWidth(int val) {
            byteBase.setInt32(4, val);
        }
        public final int get_iBorderWidth() {
            return byteBase.getInt32(4);
        }
        public final void set_iScrollWidth(int val) {
            byteBase.setInt32(8, val);
        }
        public final int get_iScrollWidth() {
            return byteBase.getInt32(8);
        }
        public final void set_iScrollHeight(int val) {
            byteBase.setInt32(12, val);
        }
        public final int get_iScrollHeight() {
            return byteBase.getInt32(12);
        }
        public final void set_iCaptionWidth(int val) {
            byteBase.setInt32(16, val);
        }
        public final int get_iCaptionWidth() {
            return byteBase.getInt32(16);
        }
        public final void set_iCaptionHeight(int val) {
            byteBase.setInt32(20, val);
        }
        public final int get_iCaptionHeight() {
            return byteBase.getInt32(20);
        }
        public final Win32.LOGFONTW get_lfCaptionFont() {
            return Win32.instance.createLOGFONTW(getElementPointer(24));
        }
        public final void set_iSmCaptionWidth(int val) {
            byteBase.setInt32(116, val);
        }
        public final int get_iSmCaptionWidth() {
            return byteBase.getInt32(116);
        }
        public final void set_iSmCaptionHeight(int val) {
            byteBase.setInt32(120, val);
        }
        public final int get_iSmCaptionHeight() {
            return byteBase.getInt32(120);
        }
        public final Win32.LOGFONTW get_lfSmCaptionFont() {
            return Win32.instance.createLOGFONTW(getElementPointer(124));
        }
        public final void set_iMenuWidth(int val) {
            byteBase.setInt32(216, val);
        }
        public final int get_iMenuWidth() {
            return byteBase.getInt32(216);
        }
        public final void set_iMenuHeight(int val) {
            byteBase.setInt32(220, val);
        }
        public final int get_iMenuHeight() {
            return byteBase.getInt32(220);
        }
        public final Win32.LOGFONTW get_lfMenuFont() {
            return Win32.instance.createLOGFONTW(getElementPointer(224));
        }
        public final Win32.LOGFONTW get_lfStatusFont() {
            return Win32.instance.createLOGFONTW(getElementPointer(316));
        }
        public final Win32.LOGFONTW get_lfMessageFont() {
            return Win32.instance.createLOGFONTW(getElementPointer(408));
        }
        @Override
        public int size() {
            return sizeof;
        }
    }

    public final NONCLIENTMETRICSW createNONCLIENTMETRICSW(boolean direct) {
        return new NONCLIENTMETRICSW(direct);
    }
    public final NONCLIENTMETRICSW createNONCLIENTMETRICSW(VoidPointer base) {
        return new NONCLIENTMETRICSW(base);
    }
    public final NONCLIENTMETRICSW createNONCLIENTMETRICSW(long addr) {
        return new NONCLIENTMETRICSW(addr);
    }


    public static class MINMAXINFO extends CommonStructWrapper {

        public static final int sizeof = 40;

        MINMAXINFO(boolean direct) {
            super(sizeof, direct);
        }
        MINMAXINFO(VoidPointer base) {
            super(base);
        }
        MINMAXINFO(long addr) {
            super(addr);
        }
        public final Win32.POINT get_ptReserved() {
            return Win32.instance.createPOINT(getElementPointer(0));
        }
        public final Win32.POINT get_ptMaxSize() {
            return Win32.instance.createPOINT(getElementPointer(8));
        }
        public final Win32.POINT get_ptMaxPosition() {
            return Win32.instance.createPOINT(getElementPointer(16));
        }
        public final Win32.POINT get_ptMinTrackSize() {
            return Win32.instance.createPOINT(getElementPointer(24));
        }
        public final Win32.POINT get_ptMaxTrackSize() {
            return Win32.instance.createPOINT(getElementPointer(32));
        }
        @Override
        public int size() {
            return sizeof;
        }
    }

    public final MINMAXINFO createMINMAXINFO(boolean direct) {
        return new MINMAXINFO(direct);
    }
    public final MINMAXINFO createMINMAXINFO(VoidPointer base) {
        return new MINMAXINFO(base);
    }
    public final MINMAXINFO createMINMAXINFO(long addr) {
        return new MINMAXINFO(addr);
    }


    public static class SHDESCRIPTIONID extends CommonStructWrapper {

        public static final int sizeof = 20;

        SHDESCRIPTIONID(boolean direct) {
            super(sizeof, direct);
        }
        SHDESCRIPTIONID(VoidPointer base) {
            super(base);
        }
        SHDESCRIPTIONID(long addr) {
            super(addr);
        }
        public final void set_dwDescriptionId(int val) {
            byteBase.setInt32(0, val);
        }
        public final int get_dwDescriptionId() {
            return byteBase.getInt32(0);
        }
        public final Win32.GUID get_clsid() {
            return Win32.instance.createGUID(getElementPointer(4));
        }
        @Override
        public int size() {
            return sizeof;
        }
    }

    public final SHDESCRIPTIONID createSHDESCRIPTIONID(boolean direct) {
        return new SHDESCRIPTIONID(direct);
    }
    public final SHDESCRIPTIONID createSHDESCRIPTIONID(VoidPointer base) {
        return new SHDESCRIPTIONID(base);
    }
    public final SHDESCRIPTIONID createSHDESCRIPTIONID(long addr) {
        return new SHDESCRIPTIONID(addr);
    }


    public static class STYLESTRUCT extends CommonStructWrapper {

        public static final int sizeof = 8;

        STYLESTRUCT(boolean direct) {
            super(sizeof, direct);
        }
        STYLESTRUCT(VoidPointer base) {
            super(base);
        }
        STYLESTRUCT(long addr) {
            super(addr);
        }
        public final void set_styleOld(int val) {
            byteBase.setInt32(0, val);
        }
        public final int get_styleOld() {
            return byteBase.getInt32(0);
        }
        public final void set_styleNew(int val) {
            byteBase.setInt32(4, val);
        }
        public final int get_styleNew() {
            return byteBase.getInt32(4);
        }
        @Override
        public int size() {
            return sizeof;
        }
    }

    public final STYLESTRUCT createSTYLESTRUCT(boolean direct) {
        return new STYLESTRUCT(direct);
    }
    public final STYLESTRUCT createSTYLESTRUCT(VoidPointer base) {
        return new STYLESTRUCT(base);
    }
    public final STYLESTRUCT createSTYLESTRUCT(long addr) {
        return new STYLESTRUCT(addr);
    }


    public static class TTPOLYCURVE extends CommonStructWrapper {

        public static final int sizeof = 12;

        TTPOLYCURVE(boolean direct) {
            super(sizeof, direct);
        }
        TTPOLYCURVE(VoidPointer base) {
            super(base);
        }
        TTPOLYCURVE(long addr) {
            super(addr);
        }
        public final void set_wType(short val) {
            byteBase.setInt16(0, val);
        }
        public final short get_wType() {
            return byteBase.getInt16(0);
        }
        public final void set_cpfx(short val) {
            byteBase.setInt16(2, val);
        }
        public final short get_cpfx() {
            return byteBase.getInt16(2);
        }
        public final Int8Pointer get_apfx() {
            return nb.createInt8Pointer(getElementPointer(4));
        }
        @Override
        public int size() {
            return sizeof;
        }
    }

    public final TTPOLYCURVE createTTPOLYCURVE(boolean direct) {
        return new TTPOLYCURVE(direct);
    }
    public final TTPOLYCURVE createTTPOLYCURVE(VoidPointer base) {
        return new TTPOLYCURVE(base);
    }
    public final TTPOLYCURVE createTTPOLYCURVE(long addr) {
        return new TTPOLYCURVE(addr);
    }


    public static class MONITORINFOEXW extends CommonStructWrapper {

        public static final int sizeof = 104;

        MONITORINFOEXW(boolean direct) {
            super(sizeof, direct);
        }
        MONITORINFOEXW(VoidPointer base) {
            super(base);
        }
        MONITORINFOEXW(long addr) {
            super(addr);
        }
        public final Win32.MONITORINFO get_MONITORINFO() {
            return Win32.instance.createMONITORINFO(getElementPointer(0));
        }
        public final Int16Pointer get_szDevice() {
            return nb.createInt16Pointer(getElementPointer(40));
        }
        @Override
        public int size() {
            return sizeof;
        }
    }

    public final MONITORINFOEXW createMONITORINFOEXW(boolean direct) {
        return new MONITORINFOEXW(direct);
    }
    public final MONITORINFOEXW createMONITORINFOEXW(VoidPointer base) {
        return new MONITORINFOEXW(base);
    }
    public final MONITORINFOEXW createMONITORINFOEXW(long addr) {
        return new MONITORINFOEXW(addr);
    }


    public static class WINDOWPOS extends CommonStructWrapper {

        public static final int sizeof = NativeBridge.is64 ? 40 : 28;

        WINDOWPOS(boolean direct) {
            super(sizeof, direct);
        }
        WINDOWPOS(VoidPointer base) {
            super(base);
        }
        WINDOWPOS(long addr) {
            super(addr);
        }
        public final void set_hwnd(long val) {
            byteBase.setAddress(0, val);
        }
        public final long get_hwnd() {
            return byteBase.getAddress(0);
        }
        public final void set_hwndInsertAfter(long val) {
            byteBase.setAddress(NativeBridge.is64 ? 8 : 4, val);
        }
        public final long get_hwndInsertAfter() {
            return byteBase.getAddress(NativeBridge.is64 ? 8 : 4);
        }
        public final void set_x(int val) {
            byteBase.setInt32(NativeBridge.is64 ? 16 : 8, val);
        }
        public final int get_x() {
            return byteBase.getInt32(NativeBridge.is64 ? 16 : 8);
        }
        public final void set_y(int val) {
            byteBase.setInt32(NativeBridge.is64 ? 20 : 12, val);
        }
        public final int get_y() {
            return byteBase.getInt32(NativeBridge.is64 ? 20 : 12);
        }
        public final void set_cx(int val) {
            byteBase.setInt32(NativeBridge.is64 ? 24 : 16, val);
        }
        public final int get_cx() {
            return byteBase.getInt32(NativeBridge.is64 ? 24 : 16);
        }
        public final void set_cy(int val) {
            byteBase.setInt32(NativeBridge.is64 ? 28 : 20, val);
        }
        public final int get_cy() {
            return byteBase.getInt32(NativeBridge.is64 ? 28 : 20);
        }
        public final void set_flags(int val) {
            byteBase.setInt32(NativeBridge.is64 ? 32 : 24, val);
        }
        public final int get_flags() {
            return byteBase.getInt32(NativeBridge.is64 ? 32 : 24);
        }
        @Override
        public int size() {
            return sizeof;
        }
    }

    public final WINDOWPOS createWINDOWPOS(boolean direct) {
        return new WINDOWPOS(direct);
    }
    public final WINDOWPOS createWINDOWPOS(VoidPointer base) {
        return new WINDOWPOS(base);
    }
    public final WINDOWPOS createWINDOWPOS(long addr) {
        return new WINDOWPOS(addr);
    }


    public static class NMHDR extends CommonStructWrapper {

        public static final int sizeof = NativeBridge.is64 ? 24 : 12;

        NMHDR(boolean direct) {
            super(sizeof, direct);
        }
        NMHDR(VoidPointer base) {
            super(base);
        }
        NMHDR(long addr) {
            super(addr);
        }
        public final void set_hwndFrom(long val) {
            byteBase.setAddress(0, val);
        }
        public final long get_hwndFrom() {
            return byteBase.getAddress(0);
        }
        public final void set_idFrom(long val) {
            byteBase.setCLong(NativeBridge.is64 ? 8 : 4, val);
        }
        public final long get_idFrom() {
            return byteBase.getCLong(NativeBridge.is64 ? 8 : 4);
        }
        public final void set_code(int val) {
            byteBase.setInt32(NativeBridge.is64 ? 16 : 8, val);
        }
        public final int get_code() {
            return byteBase.getInt32(NativeBridge.is64 ? 16 : 8);
        }
        @Override
        public int size() {
            return sizeof;
        }
    }

    public final NMHDR createNMHDR(boolean direct) {
        return new NMHDR(direct);
    }
    public final NMHDR createNMHDR(VoidPointer base) {
        return new NMHDR(base);
    }
    public final NMHDR createNMHDR(long addr) {
        return new NMHDR(addr);
    }


    public static class POINTFX extends CommonStructWrapper {

        public static final int sizeof = 8;

        POINTFX(boolean direct) {
            super(sizeof, direct);
        }
        POINTFX(VoidPointer base) {
            super(base);
        }
        POINTFX(long addr) {
            super(addr);
        }
        public final FIXED get_x() {
            return instance.createFIXED(getElementPointer(0));
        }
        public final FIXED get_y() {
            return instance.createFIXED(getElementPointer(4));
        }
        @Override
        public int size() {
            return sizeof;
        }
    }

    public final POINTFX createPOINTFX(boolean direct) {
        return new POINTFX(direct);
    }
    public final POINTFX createPOINTFX(VoidPointer base) {
        return new POINTFX(base);
    }
    public final POINTFX createPOINTFX(long addr) {
        return new POINTFX(addr);
    }


    public static class FIXED extends CommonStructWrapper {

        public static final int sizeof = 4;

        FIXED(boolean direct) {
            super(sizeof, direct);
        }
        FIXED(VoidPointer base) {
            super(base);
        }
        FIXED(long addr) {
            super(addr);
        }
        public final void set_fract(short val) {
            byteBase.setInt16(0, val);
        }
        public final short get_fract() {
            return byteBase.getInt16(0);
        }
        public final void set_value(short val) {
            byteBase.setInt16(2, val);
        }
        public final short get_value() {
            return byteBase.getInt16(2);
        }
        @Override
        public int size() {
            return sizeof;
        }
    }

    public final FIXED createFIXED(boolean direct) {
        return new FIXED(direct);
    }
    public final FIXED createFIXED(VoidPointer base) {
        return new FIXED(base);
    }
    public final FIXED createFIXED(long addr) {
        return new FIXED(addr);
    }

}

